NoSuchMethodError в javax.стойкость.Таблица.индексы()[Ljavax/сохранение/индекс
у меня есть приложение Play Framework, и я был использование Hibernate 4.2.5.Final (который извлекается через диспетчер зависимостей Maven). Я решил перейти на Hibernate 4.3.0.Наконец, перекомпилируйте мое приложение успешно и запустите его.
Я получил исключение ниже, и не смог выяснить, почему. Я понизился до 4.2.5, и эта проблема не возникла. Затем я попытался обновить Hibernate с каждой окончательной версией после 4.2.5. То есть я пошел от 4.2.5.Финал 4.2.6.Финал, в 4.2.7.Финал, 4.2.8.Финал, а затем до 4.3.Окончательный. Проблема не возникает, пока я не обновлюсь до 4.3.0.Окончательный.
информация о версии 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$$anonfun$apply$$anonfun.apply(ApplicationProvider.scala:152) ~[play_2.10.jar:2.2.1]
at play.core.ReloadableApplication$$anonfun$get$$anonfun$apply$$anonfun.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$$anonfun$apply.apply(ApplicationProvider.scala:112) ~[play_2.10.jar:2.2.1]
at play.core.ReloadableApplication$$anonfun$get$$anonfun$apply.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]
6 ответов
я столкнулся с той же проблемой. Вопрос здесь в том, что артефакт play-java-jpa (ключ javaJpa в сборке.sbt файл) зависит от другой версии спецификации (version 2.0 -> "org.hibernate.javax.persistence" % "hibernate-jpa-2.0-api" % "1.0.1.Final")
.
когда вы добавили hibernate-entitymanager 4.3, это привело к появлению новой спецификации (2.1) и другого поставщика фабрики для entitymanager. В основном вы закончили тем, что обе банки в пути к классам были транзитивными зависимостями.
редактирование сборки.sbt файл, как это, и он будет временно исправить вас проблема до тех пор, пока play не выпустит новую версию плагина jpa для более новой зависимости api.
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
. В предыдущих версиях были некоторые различия в файлах сборки.
Hibernate 4.3-первая версия для реализации спецификации JPA 2.1 (часть Java EE 7). И поэтому он ожидает библиотеку JPA 2.1 в пути к классам, а не библиотеку JPA 2.0. Вот почему вы получаете это исключение: таблица.indexes () - новый атрибут таблицы, введенный в JPA 2.1
у вас, вероятно, есть 2 разные версии hibernate-JPA-api на пути к классам. Чтобы проверить этот прогон:
mvn dependency:tree >dep.txt
затем выполните поиск, если есть hibernate-jpa-2.0-api и hibernate-jpa-2.1-api. И исключите лишнее.
Я обновляю свой спящий режим JPA до 2.1, и он работает.
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
Я мог бы решить эту проблему, просто заменив jar-файл JPA api, который находится jboss7 / modules/javax/persistence/api / main на "hibernate-jpa-2.1-api". также с модулем обновления.xml в каталоге.
ошибка: Ява.ленг.NoSuchMethodError: javax.стойкость.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>
надеюсь, это кому-то поможет.