您的位置:首页 > 编程语言 > Java开发

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

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

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

以上是我百度到的,我将ejb3-persistence包删掉既可以启动了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐