java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 两种解决方案

本文详细介绍了在配置Spring + Hibernate annotations的@OneToMany一对多双向关联时出现的Java.lang.NoSuchMethodError异常的原因及解决方法,包括从hibernate3.5版本升级到3.5以上版本时的jar包冲突问题,以及如何正确处理引入的类库冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z

   两种解决方案

 

   这个异常是在我们配置spring + hibernate annotations@OneToMany 一对多双向关联后出现的异常。通常在使用注解配置这个关联关系的时候极易出现这种包的冲突问题。不过减少了Hibernate映射文件,这也相应的付出一定的代价。

说明:

 

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.jarhibernate-jpa-2.0-XXX.jar提供,Java EE(注意:是Java EE,并不是J2eeJ2ee1.4以后就命名为Java EE,而且新增了很多类库)核心类库同样也提供了javax.persistence类库,当你的项目hibernate导入的jar都正常后仍旧出现冲突异常,那么你就要考虑是不是你引入的其他类库导致了这个异常。比如Java EE5及其以后的核心类库。 

我不小心依赖了hibernate-jpa-2.0-api-1.0.1.Final.jarejb3-persistence包,导致了这个问题,删除掉去ejb3-persistence依赖即可。

以上转自:http://symphony.b3log.org/article/1407488571351

 

在增加项目依赖的时候需要我们注意依赖包是否相互冲突,网上的主流方法是:


1.删除建立web项目时自带的Javaee.jar,可是这样带来的后果是 httpServletRequest 等组件无法使用。 (我曾经这样干过,),然后我将项目用的javaee5的包换掉,装入javaee6,但是在项目开始没过几天所有的依赖包都变成黑色的那种了,也就是在编译的过程中出现了冲突(因为是在myeclipse8.6上开发的,javaee6可能水土不服),后来改成myeclipse10了,10则自带javaee6的并且改了一些5Hibernate框架包的另外一些异常。

 

2.使用服务器是tomcat,当发布的时候,自然日志会打一大堆,

出现sessionFactory初始化失败,然后告诉你没有这个方法,网上说的方法就是将myeclipse中的D:\myeclipse10\installMyeclipse10\Common\plugins\com.genuitec.eclipse.j2eedt.core_10.5.0.me201207171805\data\libraryset下有EE_5EE_6两个文件夹,将EE_5下的javaee.jar使用解压工具打开,(我使用的是360解压,)然后删除persistence文件夹 ,而在EE_6下的文件也有一个javax.persistence.jar的文件,将其删除。

   

但是要说明的是我按照2的方法删除后依然不好使。这个方法在很多论坛和其他博客中都出现了,不过在这里还是不好使,项目启动依然报错。于是在文章开始的说明处得到答案,将EE_6下的javax.persistence.jar还原,转而ejb3-persistence依赖,然后发布项目,结果好使了。

  步骤:在web项目下的lib目录中有该依赖则删除,或者进入项目所在文件夹,将该依赖删除。


   在这里综述上述两种方法,有遇到此异常的可以借鉴一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值