在 Weblogic 12.1.x 应用程序服务器上为 JPA 2.1 + 'Spring Data JPA' 选择哪个 maven 依赖项?

Posted

技术标签:

【中文标题】在 Weblogic 12.1.x 应用程序服务器上为 JPA 2.1 + \'Spring Data JPA\' 选择哪个 maven 依赖项?【英文标题】:Which maven dependency to choose for JPA 2.1 + 'Spring Data JPA' on Weblogic 12.1.x application server?在 Weblogic 12.1.x 应用程序服务器上为 JPA 2.1 + 'Spring Data JPA' 选择哪个 maven 依赖项? 【发布时间】:2015-08-14 16:17:34 【问题描述】:

我正在尝试在 Java 8 上的 Weblogic 12.1.3 上部署 JPA 2.1 (Hibernate) 项目并收到此错误。但适用于 Tomcat 8。

Caused By: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:973)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3845)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3799)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1412)
    Truncated. see log file for complete stacktrace

pom.xml

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>4.3.11.Final</version>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>


    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>


   <!--     
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.8.2.RELEASE</version>
        <exclusions>
            <exclusion>
                <groupId>org.hibernate.javax.persistence</groupId>
                <artifactId>hibernate-jpa-2.0-api</artifactId>
            </exclusion>
        </exclusions>           
    </dependency>
     -->

更新:-

如下所述,Weblogic 12.1.3 默认情况下未启用 JPA 2.1。并且可以按照此处的说明启用http://www.oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/01-06-004-JavaEE7andWebLogicServer/javaee7.html#section1

【问题讨论】:

NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index的可能重复 @KumarAbhinav 我看过很多这样的帖子,但没有帮助。 【参考方案1】:

Weblogic 是一个 java-ee 应用服务器,带有完整的 java-ee 堆栈(包括 JPA)。

Weblogic 12.1.3 附带 jpa 2.1,其中 eclipselink 作为提供者,请参阅 here

包括 hibernate 作为 jpa 实现在这里没有意义,因为服务器已经自带了它自己的实现(提供了 maven 范围)

我想这个依赖关系

<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>

已经足够了(jpa 2.1 是java-ee 7 stack 的一部分)

【讨论】:

这里说你必须明确启用它(JPA 2.1):oracle.com/webfolder/technetwork/tutorials/obe/fmw/wls/12c/… 事实上,weblo 12.1.3 没有完全通过 java-ee 7 认证(请参阅我的第一个链接)所以我不确定在这里使用 java-ee 7 api 是否真的安全,如果我是你我将包括 javaee-api 6,不包括 jpa 2.0,并包括 jpa 2.1 api。反正没有官方的 api 版本 (java.net/jira/browse/JPA_SPEC-60) 所以你必须选择这个mvnrepository.com/artifact/org.eclipse.persistence/… 非常感谢你们两位。这些链接非常有帮助。一旦我在类路径中添加了那些 2.1 jar,它就起作用了。【参考方案2】:

可能是 Weblogic 正在使用自己的 JPA 库,该库比您的要旧。可能是在安装过程中未启用 JPA 2.1。您需要配置服务器以强制执行您的库,而不是 WLS 提供的库。 How to configure prefer application packages

【讨论】:

以上是关于在 Weblogic 12.1.x 应用程序服务器上为 JPA 2.1 + 'Spring Data JPA' 选择哪个 maven 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章

WebLogic 12c Linux 命令行 安装

linux如何访问对端weblogic

weblogic 12c怎么创建节点管理器

无法安装weblogic

weblogic怎么配置数据源

如何在 weblogic 服务器上获取请求-响应日志