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

标签 java playframework-2.0 hibernate-4.x

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

我得到了下面的异常,但无法弄清楚原因。我降级回 4.2.5 并没有出现这个问题。然后,我尝试在 4.2.5 之后的每个最终版本中升级 Hibernate。也就是说,我从 4.2.5.Final 到 4.2.6.Final,到 4.2.7.Final,到 4.2.8.Final,然后到 4.3.Final。在我升级到 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)

还有异常(exception):

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]

最佳答案

我遇到了同样的问题。这里的问题是 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 时,这为实体管理器带来了更新的规范 (2.1) 和不同的工厂提供程序。基本上你最终在类路径中都有两个 jar 作为传递依赖。

像这样编辑您的 build.sbt 文件,它将暂时解决您的问题,直到 play 发布新版本的 jpa 插件以用于更新的 api 依赖项。

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。在以前的版本中,构建文件存在一些差异。

关于java - javax.persistence.Table.indexes()[Ljavax/persistence/Index 中的 NoSuchMethodError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20734540/

相关文章:

java - 玩2.0不自动重新加载

java - Hibernate Criteria,分组/选择父级的不同子级

java - Java3d 小程序中的 JPopupMenu 不接收鼠标或键盘输入

java - 无法提取 NotoSansCJKsc-adobe reader 中的常规字体错误?

scala - 戏剧中的 Specs2 测试给了我“找不到 org.specs2.main.CommandLineAsResult 类型的证据参数的隐式值

java - 使用 Play 框架 2.3x 实现 Hibernate

java - HQL语法错误

java - 在 Hibernate 中,StatelessSession 在有 EAGER JOIN 时防止过滤掉重复项

java - BigInteger.toString 方法正在删除前导 0

java - 如何理解 for 循环初始化的第 23 行发生了什么