首页  >  文章  >  Java  >  为什么我的 Play Framework 应用程序使用 Hibernate 4.3.0.Final 抛出 NoSuchMethodError:javax.persistence.Table.indexes()?

为什么我的 Play Framework 应用程序使用 Hibernate 4.3.0.Final 抛出 NoSuchMethodError:javax.persistence.Table.indexes()?

DDD
DDD原创
2024-11-25 09:07:12838浏览

Why Does My Play Framework App with Hibernate 4.3.0.Final Throw a NoSuchMethodError: javax.persistence.Table.indexes()?

NoSuchMethodError:javax.persistence.Table.indexes()[Ljavax/persistence/Index;在 Hibernate 中

在 Hibernate 4.3.0.Final 中使用 Play Framework 应用程序时,用户可能会在 javax.persistence.Table.indexes() 中遇到 NoSuchMethodError 异常。此问题特定于 Hibernate 4.3.0.Final,在 4.2.5.Final 等早期版本中不会出现。

根本原因

发生错误的原因应用程序类路径中不同版本的 Hibernate 规范之间的冲突。 play-java-jpa 工件依赖于 Hibernate 2.0 API (hibernate-jpa-2.0-api),而 Hibernate 4.3.0.Final 引入了 Hibernate 2.1 API。因此,两个 API 版本在类路径中共存,导致 NoSuchMethodError 异常。

解决方案

要解决此问题,请从build.sbt 文件,同时包含 Hibernate 4.3.0.Final。以下是 build.sbt 文件的更新版本:

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。以前版本的构建文件中可能存在细微差别。
  • 进行这些更改后,重建应用程序应该解决 NoSuchMethodError 异常。

以上是为什么我的 Play Framework 应用程序使用 Hibernate 4.3.0.Final 抛出 NoSuchMethodError:javax.persistence.Table.indexes()?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn