Weblogic+;Hibernate错误:javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index

Weblogic+;Hibernate错误:javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index,java,hibernate,weblogic,jpa-2.1,Java,Hibernate,Weblogic,Jpa 2.1,我正在将一个在Tomcat8上运行的项目迁移到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:

我正在将一个在Tomcat8上运行的项目迁移到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
-Weblogic:12.1.3
-hibernate entitymanager:4.3.1.Final
-hibernate核心:4.3.1.Final
-JavaEEAPI: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>

爪哇
JavaEEAPI
7
org.hibernate
冬眠核心
4.3.1.最终版本
org.hibernate
休眠实体管理器
4.3.1.最终版本
com.microsoft.sqlserver
sqljdbc4
4

奇怪的是,您使用了
javaee-api-7.0.jar
,Hibernate 4将
Hibernate-jpa-2.1-api-1.0.0.Final.jar
作为依赖项。但这不是错误的原因

JoinTable.indexes()
是通过
JavaPersistence2.1
添加的。因此,在类路径中(在Weblogic默认库文件夹中)有一个带有
JoinTable
注释的旧jar

要检查jar在哪里,请在Hibernate配置代码之前运行此代码

URL joinTableUrl = Thread.currentThread().getContextClassLoader()
    .getResource(
    "javax/persistence/JoinTable.class");
System.out.println(joinTableUrl);
要检查
JoinTable
索引()
方法

Class<?> joinTable = Thread.currentThread().getContextClassLoader()
        .loadClass(JoinTable.class.getName());

System.out.println(Arrays.asList(joinTable.getDeclaredMethods()));
Class joinTable=Thread.currentThread().getContextClassLoader()
.loadClass(JoinTable.class.getName());
System.out.println(Arrays.asList(joinTable.getDeclaredMethods());