java - Geronimo 下的 JPA 2 和 Tomcat

标签 java hibernate jpa-2.0 geronimo

我有 Spring MVC 应用程序与 Hibernate 集成。一切正常,直到我使用 @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 等其他应用程序服务器上运行此应用程序,一切都OK。

最佳答案

该类在多个 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文件冲突引起的,你只需尝试不同的情况就可以准确地找出冲突的位置。

关于java - Geronimo 下的 JPA 2 和 Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9540793/

相关文章:

java - 如何查看一个对象是否是扩展java中特定父级的类的实例

java - 获取有关黑莓蓝牙远程设备的信息

java - 从测试用例设置 TestNG 超时

android - Android的Java级别兼容性?

java - 序列化:基本理解和文档

java - 如何在 hibernate 响应中检查列表内的列表是否为空

hibernate - JPA 和 Hibernate 代理行为

java - 独立的 Spring Hibernate 中的空 Autowiring 字段

java - Spring data JPA中findBy和findOneBy的区别

java - 使用 Java 从数据库 View 中未检索到结果