我正在尝试升级到Hibernate 3.5.3-FINAL。
运行单元测试时,我现在收到以下异常:
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1837)
我的类路径包含以下JAR:
从hibernatedist:
antlr-2.7.6.jar commons-collections-3.1.jar dom4j-1.6.1.jar javassist-3.9.0.GA.jar jta-1.1.jar slf4j-api-1.5.8.jar cglib-2.2.jar hibernate-jpa-2.0-api-1.0.0.Final.jar hibernate3.jar
其他jar:
blazeds-common-3.2.0.3978.jar blazeds-core-3.2.0.3978.jar blazeds-opt-3.2.0.3978.jar blazeds-proxy-3.2.0.3978.jar blazeds-remoting-3.2.0.3978.jar commons-lang-2.3.jar dbunit-2.4.7.jar ejb3-persistence.jar // Note, I've tried excluding this, but I get different errors guava-r05.jar hsqldb-1.8.0.7.jar junit-4.1.jar lambdaj-2.0-with-dependencies.jar log4j-1.2.14.jar mockito-all-1.8.0.jar persistence-api-1.0.jar spring-security-core-2.0.0.jar spring.jar sqljdbc.jar
我已经对此进行了研究,发现答案表明我的Web服务器必须符合JPA2:
不幸的是,如果您的应用服务器不符合JPA 2标准,那么您可能会不走运
该项目是一个库,而不是网络服务器项目。(尽管最终将其部署到Web服务器,但我只是在这里运行单元测试)
我想念什么?
<indulgent_rant>
附带说明,每次升级Hibernate时,我都会发现自己花了很多时间研究MethodNotFoundException或ClassNotFoundException的冲突jar,这令人非常沮丧。一定有更简单的方法吗?
MethodNotFoundException
ClassNotFoundException
我确信,在宣布这一消息后,他们将这些模块合并到一个核心项目中,这些冲突会消失吗?
</indulgent_rant>
正如Timo指出的,删除persistence-api-1.0.jar。
persistence-api-1.0.jar
以防万一,这是我正在使用的依赖项:
org.hibernate:hibernate-entitymanager:jar:3.5.3-Final:compile +-org.hibernate:hibernate-core:jar:3.5.3-Final:compile | +-antlr:antlr:jar:2.7.6:compile | +-commons-collections:commons-collections:jar:3.2:compile | +-dom4j:dom4j:jar:1.6.1:编译 | | \-xml-apis:xml-apis:jar:1.0.b2:compile | \-javax.transaction:jta:jar:1.1:compile +-org.hibernate:hibernate注释:jar:3.5.3-Final:compile | \-org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final:compile +-cglib:cglib:jar:2.2:compile | \-asm:asm:jar:3.1:compile +-javassist:javassist:jar:3.9.0.GA:compile \-org.hibernate.javax.persistence:hibernate-jpa-2.0-api:jar:1.0.0.Final:compile
我从我的单个声明中获取它们pom.xml:
pom.xml
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>3.5.3-Final</version> </dependency>
这应该可以以某种方式回答您的放纵语(如果我改写:使用Maven-或知道您在做什么)。