NoSuchMethodError dans javax.persistence.Table.indexes()[Ljavax/persistence/Index
Dans une application Play Framework, mise à niveau depuis Hibernate 4.2.5.Final à 4.3.0.Final peut conduire à un Exception "NoSuchMethodError" concernant javax.persistence.Table.indexes().
Cause :
Le problème provient d'un conflit de dépendances entre l'artefact play-java-jpa et l'artefact hibernate-entitymanager. L'artefact play-java-jpa repose sur une version différente de l'API de persistance (version 2.0) que l'artefact hibernate-entitymanager (version 2.1). Lorsque les deux artefacts sont présents dans le chemin de classe, la définition d'API la plus récente est prioritaire, ce qui entraîne la non-définition de la méthode javax.persistence.Table.indexes().
Solution :
Pour résoudre le problème, modifiez votre fichier build.sbt et excluez la dépendance hibernate-jpa-2.0-api du play-java-jpa artefact. La configuration des dépendances mise à jour devrait ressembler à ceci :
libraryDependencies ++= Seq( javaJdbc, javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"), "org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final" )
Cette configuration garantit que le chemin de classe contient uniquement la définition de l'API de la version la plus récente (2.1) et évite le conflit de définition de méthode.
Pour Play 2.2.x :
La configuration du fichier build.sbt fournie ci-dessus est conçue pour Play 2.2.x. Pour les versions antérieures de Play, il peut exister des différences dans la configuration du fichier de build. Consultez la documentation Play pour plus d'informations sur la configuration des dépendances dans les différentes versions de Play.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!