我正在尝试在Tomcat服务器上部署基于Spring的Web应用程序,我无法自动装配EntityManager。根本原因是NoSuchMethodError。
我假设我有不正确的hibernate JAR作为依赖项。任何帮助将不胜感激
Caused by: java.lang.NoSuchMethodError: javax.persistence.spi.PersistenceUnitInfo.getValidationMode()Ljavax/persistence/ValidationMode;
我看到上一篇文章指出问题是包含以下依赖项,但是,我不包括那个:
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0.2</version>
</dependency>
以下是我的POM依赖项:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901-1.jdbc4</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.12.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.2.Final</version>
</dependency>
</dependencies>
答案 0 :(得分:0)
您需要在类路径中检查PersistenceUnitInfo类的所有不同jar。
我希望你已经知道方法getValidationMode仅在JPA 2之后才存在。
不需要在依赖性方面找到你有多少版本。
因此,如果您正在使用工具(eclipse / intellij),您将能够看到一个depndency hieracy / effective pom,并且可以看到使用了哪个依赖项。并且您可以从那里开始然后您将能够知道必须存在导致此类问题的较旧/无效版本,然后从其父依赖项中排除该版本。 或者只需在命令提示符/终端中运行即可对其进行分析。
mvn dependency:analyze