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

 bb 发布于 2023-02-08 16:01

我有一个游戏框架应用程序,我使用Hibernate 4.2.5.Final(这是通过Maven的依赖管理检索).我决定升级到Hibernate 4.3.0.Final,成功重新编译我的应用程序,然后运行它.

我在下面得到了例外,并且无法找出原因.我降级回4.2.5,这个问题没有发生.然后,我尝试在4.2.5之后使用每个Final版本升级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)

例外:

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]

hcura.. 79

我遇到了同样的问题.这里的问题是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为新的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.在以前的版本中,构建文件存在一些差异.

5 个回答
  • 我遇到了同样的问题.这里的问题是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为新的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.在以前的版本中,构建文件存在一些差异.

    2023-02-08 16:02 回答
  • 您可能在类路径上有两个不同版本的hibernate-jpa-api.要检查该运行:

    mvn dependency:tree >dep.txt
    

    然后搜索是否有hibernate-jpa-2.0-api和hibernate-jpa-2.1-api.并排除多余的一个.

    2023-02-08 16:02 回答
  • Hibernate 4.3是第一个实现JPA 2.1规范的版本(Java EE 7的一部分).因此,它期望类路径中的JPA 2.1库,而不是JPA 2.0库.这就是你得到这个异常的原因:Table.indexes()是JPA 2.1中引入的Table的新属性

    2023-02-08 16:02 回答
  • 我将我的Hibernate JPA更新为2.1,它的工作原理.

    <dependency>
        <groupId>org.hibernate.javax.persistence</groupId>
        <artifactId>hibernate-jpa-2.1-api</artifactId>
        <version>1.0.0.Final</version>
    </dependency>
    

    2023-02-08 16:04 回答
  • 我可以简单地用'hibernate-jpa-2.1-api'替换位于jboss7/modules/javax/persistence/api/main的JPA api jar文件来解决这个问题.还可以在目录中更新module.xml.

    2023-02-08 16:04 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有