Weblogic + Hibernate Error: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index
Weblogic + Hibernate Error: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index
我正在将 运行 在 Tomcat 8 上的一个项目迁移到 Weblogic。
我正在使用 Hibernate + JPA 2。当我在 weblogic 中部署时出现以下错误:
Failure occurred in the execution of deployment request with ID "26012160125422" for task "114". Error is: "weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index;"
weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index
环境
- Java: jdk1.8.0_60
- 网络逻辑:12.1.3
- 休眠实体管理器:4.3.1.Final
- 休眠核心:4.3.1.Final
- javaee-api: 7.0
pom.xml
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
你使用 javaee-api-7.0.jar
很奇怪,Hibernate 4 有 hibernate-jpa-2.1-api-1.0.0.Final.jar
作为依赖项。但这不是错误的原因。
JoinTable.indexes()
添加了 Java Persistence 2.1
。因此,您在类路径中(在 Weblogic 默认 lib 文件夹中)只有一个带有 JoinTable
注释的旧 jar。
要检查这个 jar 在哪里,运行 Hibernate 配置代码之前的这段代码
URL joinTableUrl = Thread.currentThread().getContextClassLoader()
.getResource(
"javax/persistence/JoinTable.class");
System.out.println(joinTableUrl);
检查JoinTable
有indexes()
方法
Class<?> joinTable = Thread.currentThread().getContextClassLoader()
.loadClass(JoinTable.class.getName());
System.out.println(Arrays.asList(joinTable.getDeclaredMethods()));
我正在将 运行 在 Tomcat 8 上的一个项目迁移到 Weblogic。 我正在使用 Hibernate + JPA 2。当我在 weblogic 中部署时出现以下错误:
Failure occurred in the execution of deployment request with ID "26012160125422" for task "114". Error is: "weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index;"
weblogic.application.ModuleException: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index
环境
- Java: jdk1.8.0_60
- 网络逻辑:12.1.3
- 休眠实体管理器:4.3.1.Final
- 休眠核心:4.3.1.Final
- javaee-api: 7.0
pom.xml
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.1.Final</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>sqljdbc4</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
你使用 javaee-api-7.0.jar
很奇怪,Hibernate 4 有 hibernate-jpa-2.1-api-1.0.0.Final.jar
作为依赖项。但这不是错误的原因。
JoinTable.indexes()
添加了 Java Persistence 2.1
。因此,您在类路径中(在 Weblogic 默认 lib 文件夹中)只有一个带有 JoinTable
注释的旧 jar。
要检查这个 jar 在哪里,运行 Hibernate 配置代码之前的这段代码
URL joinTableUrl = Thread.currentThread().getContextClassLoader()
.getResource(
"javax/persistence/JoinTable.class");
System.out.println(joinTableUrl);
检查JoinTable
有indexes()
方法
Class<?> joinTable = Thread.currentThread().getContextClassLoader()
.loadClass(JoinTable.class.getName());
System.out.println(Arrays.asList(joinTable.getDeclaredMethods()));