在 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 依赖项?的主要内容,如果未能解决你的问题,请参考以下文章