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

Tengo una aplicación Play Framework y estaba usando Hibernate 4.2.5.Final (que se recupera a través del administrador de dependencias Maven). Decidí actualizar a Hibernate 4.3.0.Final, recomstackr mi aplicación con éxito y ejecutarla.

Obtuve la excepción a continuación, y no he podido averiguar por qué. Bajé de categoría a 4.2.5 y este problema no ocurrió. Luego, intenté actualizar Hibernate con cada lanzamiento final después de 4.2.5. Es decir, pasé de 4.2.5.Final a 4.2.6.Final, a 4.2.7.Final, a 4.2.8.Final y luego a 4.3.Final. El problema no ocurre hasta que actualizo a 4.3.0.Final.

Información de la versión de 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) 

Y excepción :

 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] 

Me encontré con el mismo problema. La pregunta aquí es que el artefacto play-java-jpa (clave javaJpa en el archivo build.sbt) depende de una versión diferente de la especificación (version 2.0 -> "org.hibernate.javax.persistence" % "hibernate-jpa-2.0-api" % "1.0.1.Final") .

Cuando agregó hibernate-entitymanager 4.3 esto trajo la nueva especificación (2.1) y un proveedor de fábrica diferente para el entitymanager. Básicamente terminaste teniendo ambos jar en la classpath como dependencias transitivas.

Edite su archivo build.sbt de esta manera y solucionará temporalmente su problema hasta que Play publique una nueva versión del plugin jpa para la nueva dependencia de la API.

 libraryDependencies ++= Seq( javaJdbc, javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"), "org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final" ) 

Esto es para play 2.2.x En versiones anteriores había algunas diferencias en los archivos de comstackción.

Hibernate 4.3 es la primera versión en implementar la especificación JPA 2.1 (parte de Java EE 7). Y por lo tanto, está esperando la biblioteca JPA 2.1 en el classpath, no en la biblioteca JPA 2.0. Es por eso que obtienes esta excepción: Table.indexes () es un nuevo atributo de Table, introducido en JPA 2.1

Probablemente tengas 2 versiones diferentes de hibernate-jpa-api en classpath. Para verificar esa ejecución:

 mvn dependency:tree >dep.txt 

Luego busque si hay hibernate-jpa-2.0-api e hibernate-jpa-2.1-api. Y excluir el exceso.

Actualizo mi Hibernate JPA a 2.1 y funciona.

  org.hibernate.javax.persistence hibernate-jpa-2.1-api 1.0.0.Final  

Podría resolver el problema simplemente reemplazando el archivo JPA api jar que se encuentra jboss7 / modules / javax / persistence / api / main con ‘hibernate-jpa-2.1-api’. también con la actualización de module.xml en el directorio.

Error: java.lang.NoSuchMethodError: javax.persistence.JoinTable.indexes () [Ljavax / persistence / Index;

Lo único que resolvió mi problema fue eliminar la siguiente dependencia en pom.xml: org.hibernate.javax.persistence hibernate-jpa-2.1-api 1.0.0.Final

Y reemplázalo por:

  javax.persistence persistence-api 1.0.2  

Espero que ayude a alguien.