为了账号安全,请及时绑定邮箱和手机立即绑定

javax.persistence.Table.indexes()[Ljavax/persisten

javax.persistence.Table.indexes()[Ljavax/persisten

qq_花开花谢_0 2019-07-13 14:58:53
我有一个Play Framework应用程序,我曾.使用Hibernate 4.2.5.Final(通过Maven依赖关系管理器检索)。我决定升级到Hibernate 4.3.0.Final,成功地重新编译我的应用程序,并运行它。我得到了下面的例外情况,但一直未能弄清楚原因。我将评级降至4.2.5,但这个问题并没有发生。然后,我尝试用4.2.5之后的每个最终版本升级Hibernate。也就是说,我从4.2.5到4.2.6结束,到4.2.7最后,到4.2.8最后,然后到4.3最后。在升级到4.3.0.Final之前,不会出现此问题。Java版本信息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)和例外: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]
查看完整描述

3 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

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

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

像这样编辑build.sbt文件,它将暂时修复您的问题,直到Play为更新的API依赖关系发布新版本的JPA插件。

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..在以前的版本中,构建文件有一些不同之处。


查看完整回答
反对 回复 2019-07-13
?
噜噜哒

TA贡献1784条经验 获得超7个赞

Hibernate 4.3是第一个实现JPA2.1规范的版本(JavaEE 7的一部分)。因此,它期望类路径中的JPA2.1库,而不是JPA2.0库。这就是为什么您会得到这个异常:table.index()是Table的一个新属性,在JPA2.1中引入


查看完整回答
反对 回复 2019-07-13
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

您可能在类路径上有两个不同版本的Hibernate-JPA-API。若要检查运行情况,请执行以下操作:

mvn dependency:tree >dep.txt

然后搜索是否存在Hibernate-JPA-2.0-API和Hibernate-JPA-2.1-API。不包括多余的。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 1195 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号