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

时间:2016-04-06 19:53:03

标签: java hibernate weblogic jpa-2.1

我正在将在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
- Weblogic:12.1.3
- hibernate-entitymanager:4.3.1.Final
- hibernate-core: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>

1 个答案:

答案 0 :(得分:0)

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

JoinTable.indexes()添加了Java Persistence 2.1。所以你只需要在类路径中有一个带有JoinTable注释的旧jar(在Weblogic默认的lib文件夹中)。

要检查此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()));