NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index
In a Play Framework application, upgrading from Hibernate 4.2.5.Final to 4.3.0.Final can lead to a "NoSuchMethodError" exception regarding javax.persistence.Table.indexes().
Cause:
The issue stems from a dependency conflict between the play-java-jpa artifact and the hibernate-entitymanager artifact. The play-java-jpa artifact relies on a different version of the persistence API (version 2.0) than the hibernate-entitymanager artifact (version 2.1). When both artifacts are present in the classpath, the newer API definition takes precedence, causing the method javax.persistence.Table.indexes() to be undefined.
Solution:
To resolve the issue, edit your build.sbt file and exclude the hibernate-jpa-2.0-api dependency from the play-java-jpa artifact. The updated dependency configuration should look like this:
libraryDependencies ++= Seq( javaJdbc, javaJpa.exclude("org.hibernate.javax.persistence", "hibernate-jpa-2.0-api"), "org.hibernate" % "hibernate-entitymanager" % "4.3.0.Final" )
This configuration ensures that the classpath only contains the API definition from the newer version (2.1) and avoids the method definition conflict.
For Play 2.2.x:
The build.sbt file configuration provided above is designed for Play 2.2.x. For earlier versions of Play, there may be differences in the build file configuration. Consult the Play documentation for more information on configuring dependencies in different versions of Play.
The above is the detailed content of How to Resolve a NoSuchMethodError in javax.persistence.Table.indexes() After Upgrading Hibernate in a Play Framework Application?. For more information, please follow other related articles on the PHP Chinese website!