2016-05-24 3 views
-2

Я использовал Hibernate 4.3.6 и использовал определение стойкости на основе аннотаций. На tomcat 8.0 он работал нормально. Но когда я развернулся в профиле WAS Liberty 8.5.5.7, он дал первопричину исключение, как показано ниже, и не смог понять, почему. Некоторые из них сказали обновить Hibernate до 5.1.0, но не работают. Я использую Eclipse для разработки. Я также использую Spring 4.0.1.NoSuchMethodError в javax.persistence.Table

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936) 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788) 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742) 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431) 
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) 
    ... 57 more 
+0

«Кто-то сказал, чтобы обновить» ... ну да, этот метод явно является частью JPA 2.1, и вы не используете совместимые версии поставщика JPA и JPA банку (и любой «она не работает» означает вы не обновлялись правильно). Это было задано много раз, прежде чем здесь, все можно найти с помощью поиска. –

ответ

0

Вы в пути WebSphere Liberty класса неверной jar, с JPA аннотациями предыдущих версий 2.1, как это было предложен @NeilStockton.

Во-первых, попробуйте добавить @Table(indexes = {}) всякий раз, когда источник в Eclipse. Если он может быть импортирован правильно - у вас есть правильный hibernate-jpa-2.1-api-1.0.0.Final.jar (он для Hibernate 5) в пути класса в Eclipse. Удалить @Table(indexes = {}) после этого.

Чтобы найти jar, из которого загружена некорректная аннотация @Table, попробуйте выполнить этот код где-то независимо от конфигурации Spring. Вы можете использовать для этого ContextListener.

URL url = Thread.currentThread().getContextClassLoader() 
    .getResource("javax/persistence/Table.class"); 
System.out.println(url); 
Смежные вопросы