0

我有与 Hibernate 集成的 Spring MVC 应用程序。在我使用 @OneToMany 注释之前一切都很好......我收到以下错误:

Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
at 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.buildSessionFactory(Configuration.java:1856)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:805)
at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:745)
at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1514)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1452)
... 81 more

这是我的 WEB-INF/lib 内容:

aopalliance-1.0.jar
commons-beanutils-1.8.3.jar
commons-collections-3.2.1.jar
commons-digester-2.1.jar
commons-logging-1.1.1.jar
dom4j-1.6.1.jar
h2-1.3.164.jar
hibernate-commons-annotations-3.2.0.Final.jar
hibernate-core-3.6.9.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.12.1.GA.jar
log4j-1.2.16.jar
slf4j-api-1.6.4.jar
slf4j-log4j12-1.6.4.jar
spring-aop-3.1.1.RELEASE.jar
spring-asm-3.1.1.RELEASE.jar
spring-beans-3.1.1.RELEASE.jar
spring-context-3.1.1.RELEASE.jar
spring-core-3.1.1.RELEASE.jar
spring-expression-3.1.1.RELEASE.jar
spring-hibernate3-2.0.8.jar
spring-jdbc-3.1.1.RELEASE.jar
spring-orm-3.1.1.RELEASE.jar
spring-tx-3.1.1.RELEASE.jar
spring-web-3.1.1.RELEASE.jar
spring-webmvc-3.1.1.RELEASE.jar
spring-webmvc-3.1.1.RELEASE-sources.jar
tiles-api-2.2.2.jar
tiles-core-2.2.2.jar
tiles-jsp-2.2.2.jar
tiles-servlet-2.2.2.jar
tiles-template-2.2.2.jar

我看到有些人帮助删除了 ejb3-persitence.jar,但我的类路径不包含那个 jar。如果我在 JBoss 或 Glassfish 等其他应用程序服务器下运行此应用程序,一切正常。

4

1 回答 1

2

该类在多个 jar 文件中提供,因此您需要确保您的应用程序使用的是正确的。

首先,您需要锻炼它正在使用哪个。尝试将其从您的 WEB-INF/lib 文件夹中删除,如果仍然出现相同的错误,则表示它是从其他地方加载的。

还可以尝试将其复制到 $TOMCAT_HOME/lib 作为测试,看看会发生什么。

如果您使用的是 Eclipse,请尝试验证您正在使用的 JRE/JDK,因为 javaee-api-5 也包含这些类。确保 Tomcat 加载 javaee-api 时不包含它也是值得的。

下面给出了可能导致与 hibernate-jpa jar 文件冲突的 jar 文件示例(可能有不同的版本号):

 persistence.jar
 toplink-essentials.jar
 ejb3-persistence-1.0.1.GA.jar
 ejb3-persistence-1.0.2.GA.jar
 ejb3-persistence-3.3.2.Beta1.jar
 geronimo-jpa_1.0_spec-1.1.2.jar
 geronimo-jpa_3.0_spec-1.0.jar
 geronimo-jpa_3.0_spec-1.1.1.jar
 geronimo-jpa_3.0_spec-1.1.jar
 persistence-api-1.0.jar
 geronimo-jpa_2.0_spec-1.0-PFD2.jar
 geronimo-jpa_3.0_spec-1.0-M1.jar
 glassfish-persistence-api-b32g.jar
 javaee-api-5.0-1.jar
 javaee-api-5.0-2.jar
 openjpa-all-2.0.0-M3.jar
 openejb-itests-standalone-client-3.0.1.jar
 openejb-itests-standalone-client-3.0.jar
 openejb-itests-standalone-client-3.1.1.jar
 openejb-itests-standalone-client-3.1.jar

该问题肯定是由与 jar 文件的冲突引起的,您只需尝试不同的情况即可准确找出冲突的位置。

于 2012-03-03T16:07:16.880 回答