zoukankan      html  css  js  c++  java
  • java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

    我现在用的是hibernate3.6final,出现了下面这个异常:(当我使用@ManyToOne时,不会出现异常,而且用@ManyToMany也正常

    Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
    	at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1912)
    	at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:796)
    	at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:707)
    	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:4035)
    	at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3989)
    	at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1398)
    	at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
    	at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:717)
    	at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:188)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
    	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
    	... 65 more
    

    查了很多资料,说什么的都有,解决办法是:

    删除对Java EE 5 Libraries中persitence的使用。(javaee.jar中的部分类与hibernate-jpa-2.0-api-1.0.0.Final.jar存在版本冲突.[或下载新版本javaee.jar] 或 用RAR打开javaee.jar,删除javax下的persitence目录)


    个人觉得删除对Java EE 5 Libraries中persitence的使用有点不妥,于是重新分析了一下,以下就是分析结果:

    1.在hibernate3.5之前,我们运用hibernate开发J2EE项目通常会引以下几个jar包:
    hibernate核心包:hibernate3.jar
    持久化:ejb3-persistence.jar
    则javax.persistence.OneToMany.class就在ejb3-persistence.jar中。

    2.在hibernate3.5及其以后,运用hibernate开发J2EE项目通常会引以下几个jar包:
    hibernate核心包:hibernate3.jar
    持久化:hibernate-jpa-2.0-XXX.jar
    hibernate-jpa-2.0-XXX.jar中已将包含了ejb3-persistence.jar所有类库和其他一些扩展,固然javax.persistence.OneToMany.class也就在hibernate-jpa-2.0-XXX.jar中了。所以当我们从3.5以下版本上级到3.5以上版本时,很容易出现不知道哪些jar包该保留哪些该删掉,因而两个jar包同时存在,出现了这个冲突异常。

    3.其实持久化并不是只有ejb3-persistence.jar和hibernate-jpa-2.0-XXX.jar提供,Java EE(注意:是Java EE,并不是J2ee,J2ee在1.4以后就命名为Java EE,而且新增了很多类库)核心类库同样也提供了javax.persistence类库,当你的项目hibernate导入的jar都正常后仍旧出现冲突异常,那么你就要考虑是不是你引入的其他类库导致了这个异常。比如Java EE5及其以后的核心类库。


    以上只是本人片面的分析与思考,如有不对之处,请大家多多指教。


  • 相关阅读:
    dubbo、dubbox、motan、thrift、grpc等RPC框架比较及选型
    web攻击之八:溢出攻击(nginx服务器防sql注入/溢出攻击/spam及禁User-agents)
    crontab的安装及crontab命令介绍
    开启Nginx的gzip压缩功能详解
    nginx限制请求之四:目录进行IP限制
    nginx上传目录配置,禁止执行权限
    EhCache 分布式缓存/缓存集群
    Nginx 反向代理、负载均衡、页面缓存、URL重写、读写分离及简单双机热备详解
    CDN模式介绍
    IT基础架构规划方案一(网络系统规划)
  • 原文地址:https://www.cnblogs.com/pangblog/p/3323033.html
Copyright © 2011-2022 走看看