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

来源:互联网 发布:北京折叠知乎 编辑:程序博客网 时间:2024/05/21 14:54

不说别的先贴一段异常信息:

Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Zat 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.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1226)at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:173)at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:854)at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:425)at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:131)at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:288)at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:310)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1541)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1479)... 36 more

经查阅资料证实,出现 
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 异常的主要原因是使用的MyEclipse自带的javaee.jar版本较低,和hibernate、JPA的冲突 我使用的是myeclips 8.5 版本自带的是javaee5的jar,因此我果断的将javaee5升级为javaee6.jar删除javaee5下面的所有jar包。还有就是哪个hibernate持久化的【<span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">ejb3-persistence.jar】也提供了</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">OneToMany的注解但是他没有</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">orphanRemoval()方法。因此会误导程序不知道调用加载的是哪个类。因此最好的解决方法也是直接删掉。总得来说 如果你的项目中有 【</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">hibernate-jpa-2.0-api-1.0.1.Final.jar】 那就直接把刚才上面提到的 jar删除即可。 </span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;"></span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">  再者,在我们将javaee5换成javaee6的时候我们 需要将其中的 </span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;">persistence 文件夹删掉 如下图所示</span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;"><img src="http://img.blog.csdn.net/20150424170711968?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk5MTY1Nzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="110" height="110" border="1" alt="" /></span><span style="color: rgb(51, 51, 51); font-family: 微软雅黑, Tahoma, Verdana, 宋体; font-size: 15px; line-height: 25px;"></span>   所以会出现冲突的信息 这段异常的信息主要是说明在 OneToMany的类中找不到对应的<span style="font-family: Arial, Helvetica, sans-serif;">orphanRemoval()方法。</span>
<span style="font-family: Arial, Helvetica, sans-serif;">因此这里 我们可以利用反射打印下我们调用的 </span><span style="font-family: Arial, Helvetica, sans-serif;">OneToMany 方法到底是哪个包提供的。 方法如下 </span><pre name="code" class="java">public static void main(String[] args) {try {System.out.println(Class.forName( "javax.persistence.OneToMany" ).getProtectionDomain().getCodeSource().getLocation().getFile());} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}最后打印的结果为 : /F:/Workspace/AgricomRelocationProject1/WebRoot/WEB-INF/lib/hibernate-jpa-2.0-api-1.0.1.Final.jar
见图
<img src="http://img.blog.csdn.net/20150424170740026?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMTk5MTY1Nzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="120" height="120" border="2" vspace="20" hspace="50" alt="" />
<span style="font-family: Arial, Helvetica, sans-serif;"></span>

0 0