NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index
In einer Play Framework-Anwendung, Upgrade von Hibernate 4.2.5.Final bis 4.3.0.Final kann zu a führen „NoSuchMethodError“-Ausnahme in Bezug auf javax.persistence.Table.indexes().
Ursache:
Das Problem ist auf einen Abhängigkeitskonflikt zwischen dem play-java-jpa-Artefakt zurückzuführen und das Artefakt „hibernate-entitymanager“. Das Artefakt „play-java-jpa“ basiert auf einer anderen Version der Persistenz-API (Version 2.0) als das Artefakt „hibernate-entitymanager“ (Version 2.1). Wenn beide Artefakte im Klassenpfad vorhanden sind, hat die neuere API-Definition Vorrang, was dazu führt, dass die Methode javax.persistence.Table.indexes() undefiniert ist.
Lösung:
Um das Problem zu beheben, bearbeiten Sie Ihre build.sbt-Datei und schließen Sie die hibernate-jpa-2.0-api-Abhängigkeit von play-java-jpa aus Artefakt. Die aktualisierte Abhängigkeitskonfiguration sollte wie folgt aussehen:
libraryDependencies ++= Seq( javaJdbc, javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"), "org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final" )
Diese Konfiguration stellt sicher, dass der Klassenpfad nur die API-Definition aus der neueren Version (2.1) enthält und vermeidet den Methodendefinitionskonflikt.
Für Play 2.2.x:
Die oben bereitgestellte Dateikonfiguration build.sbt ist für Play 2.2.x konzipiert. Bei früheren Versionen von Play kann es Unterschiede in der Konfiguration der Build-Datei geben. Weitere Informationen zum Konfigurieren von Abhängigkeiten in verschiedenen Versionen von Play finden Sie in der Play-Dokumentation.
Das obige ist der detaillierte Inhalt vonWie behebe ich einen NoSuchMethodError in javax.persistence.Table.indexes() nach dem Upgrade von Hibernate in einer Play Framework-Anwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!