web-dev-qa-db-ja.com

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

Play Frameworkアプリケーションがあり、Hibernate 4.2.5.Final(Maven依存関係マネージャー経由で取得されます)を使用してwasでした。 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)

および例外

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]
82
musubi

私は同じ問題に遭遇しました。ここでの質問は、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)とentitymanagerの別のファクトリプロバイダーが追加されました。基本的に、クラスパスに両方の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用です。以前のバージョンでは、ビルドファイルにいくつかの違いがありました。

79
hcura

Hibernate 4.3は、JPA 2.1仕様(Java EE 7の一部)を実装した最初のバージョンです。したがって、クラスパスにはJPA 2.0ライブラリではなく、JPA 2.1ライブラリが必要です。そのため、この例外が発生します。Table.indexes()は、JPA 2.1で導入されたTableの新しい属性です。

70
JB Nizet

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>
14
Herbert Rausch

おそらく、クラスパスにhibernate-jpa-apiの2つの異なるバージョンがあります。その実行を確認するには:

mvn dependency:tree >dep.txt

次に、hibernate-jpa-2.0-apiおよびhibernate-jpa-2.1-apiがあるかどうかを検索します。そして、余分なものを除外します。

13
Xelian

Jboss7/modules/javax/persistence/api/mainにあるJPA api jarファイルを「hibernate-jpa-2.1-api」に置き換えるだけで問題を解決できました。また、ディレクトリ内のmodule.xmlを更新します。

6
sinihong

エラー:Java.lang.NoSuchMethodError:javax.persistence.JoinTable.indexes()[Ljavax/persistence/Index;

私の問題を解決したのは、pom.xmlの次の依存関係を削除することだけでした:<dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.1-api</artifactId> <version>1.0.0.Final</version> </dependency>

それを次のように置き換えます。

<dependency>
  <groupId>javax.persistence</groupId>
  <artifactId>persistence-api</artifactId>
  <version>1.0.2</version>
</dependency>

それが誰かを助けることを願っています。

3
Marceloni Lima

スプリングブートアプリケーションでも同じ問題が発生しました。 libフォルダからjavax.persistance.jarファイルを手動で削除した後。問題が修正されました。 pom.xmlファイルでは、依存関係のみを追跡しています

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
0