ホームページ >Java >&#&チュートリアル >Hibernate 4.3.0.Final を使用した Play Framework アプリが NoSuchMethodError: javax.persistence.Table.indexes() をスローするのはなぜですか?

Hibernate 4.3.0.Final を使用した Play Framework アプリが NoSuchMethodError: javax.persistence.Table.indexes() をスローするのはなぜですか?

DDD
DDDオリジナル
2024-11-25 09:07:12864ブラウズ

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 例外が発生します。

解決策

この問題を解決するには、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"
)

注:

  • このソリューションは Play 2.2.x に適用できます。以前のバージョンのビルド ファイルには小さな違いが存在する可能性があります。
  • これらの変更を加えた後、アプリケーションを再構築すると NoSuchMethodError 例外が解決されるはずです。

以上がHibernate 4.3.0.Final を使用した Play Framework アプリが NoSuchMethodError: javax.persistence.Table.indexes() をスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。