首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >javax.persistence.Table.indexes()[Ljavax/persistence/Index中的NoSuchMethodError

javax.persistence.Table.indexes()[Ljavax/persistence/Index中的NoSuchMethodError
EN

Stack Overflow用户
提问于 2013-12-23 06:06:55
回答 9查看 111K关注 0票数 87

我有一个Play Framework应用程序,我使用的是Hibernate 4.2.5.Final (它是通过Maven依赖项管理器检索的)。我决定升级到Hibernate 4.3.0,成功地重新编译我的应用程序,并运行它。

我得到了下面的异常,但还不能找出原因。我降级回4.2.5,这个问题没有发生。然后,我尝试在4.2.5之后的每个最终版本中升级Hibernate。也就是说,我从4.2.5.Final到4.2.6.Final,再到4.2.7Final,再到4.2.8Final,然后再到4.3.Final。在我升级到4.3.0Final之前,这个问题不会出现。

Java版本信息

代码语言:javascript
复制
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)

和exception

代码语言:javascript
复制
play.api.UnexpectedException: Unexpected exception[NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at scala.Option.map(Option.scala:145) ~[scala-library.jar:na]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
    at play.core.ReloadableApplication$$anonfun$get$1$$anonfun$apply$1.apply(ApplicationProvider.scala:110) ~[play_2.10.jar:2.2.1]
    at scala.util.Success.flatMap(Try.scala:200) ~[scala-library.jar:na]
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:781) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3762) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3716) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) ~[hibernate-core-4.3.0.Final.jar:4.3.0.Final]
EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2013-12-27 20:37:20

我也遇到过同样的问题。这里的问题是play-java-jpa工件( build.sbt文件中的javaJpa密钥)依赖于规范(version 2.0 -> "org.hibernate.javax.persistence" % "hibernate-jpa-2.0-api" % "1.0.1.Final")的不同版本。

当您添加hibernate-entitymanager 4.3时,这为entitymanager带来了较新的规范(2.1)和不同的工厂提供程序。基本上,您最终在类路径中将这两个jars作为传递依赖项。

像这样编辑你的build.sbt文件,它会暂时修复你的问题,直到play为新的应用编程接口依赖发布一个新版本的jpa插件。

代码语言:javascript
复制
libraryDependencies ++= Seq(
javaJdbc,
javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"),
"org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final"
)

这是为play 2.2.x准备的。在以前的版本中,构建文件中存在一些差异。

票数 80
EN

Stack Overflow用户

发布于 2013-12-23 06:19:49

Hibernate 4.3是实现JPA 2.1规范( Java EE 7的一部分)的第一个版本。因此,它期望类路径中包含JPA2.1库,而不是JPA2.0库。这就是为什么会出现这样的异常: Table.indexes()是在JPA2.1中引入的Table的一个新属性

票数 72
EN

Stack Overflow用户

发布于 2016-07-03 06:27:30

我将Hibernate JPA更新为2.1,它可以正常工作。

代码语言:javascript
复制
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20734540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档