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

本文解决了一个在Spring与Hibernate集成环境中因@OneToMany注解引发的NoSuchMethodError错误。问题源于不同版本的Java EE jar包与Hibernate JPA之间的冲突。文章详细介绍了如何通过调整持久化层依赖来解决此类问题。

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

这个异常是在我们配置spring + hibernate annotations@OneToMany 一对多双向关联后出现的异常。

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

出现这种异常通常是由于Myeclipse的javaee.jar 版本较低,与Hibernate等自带的JPA出现了冲突。

通常在使用注解配置这个关联关系的时候极易出现这种包的冲突问题。网上一些处理方法是删除项目里的, 建立web项目时自带的Javaee.jar,可是这样带来的后果是 httpServletRequest 等组件无法使用。

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依赖即可。

以上是我百度到的,我将ejb3-persistence包删掉既可以启动了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值