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 例外が発生します。
解決策
この問題を解決するには、Hibernate 2.0 API の依存関係をクラスパスから除外します。 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" )
注:
以上がHibernate 4.3.0.Final を使用した Play Framework アプリが NoSuchMethodError: javax.persistence.Table.indexes() をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。