2014-10-28 13 views
8

Uaktualniam jpa, hibernację, wiosnę i jdk, aby włączyć nowe funkcje z JPA 2.1. Ale pojawia się następujący błąd:java.lang.NoSuchMethodError: javax.persistence.Table.indexes() [Ljavax/persistence/Index;

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

Przeczytałem inne wpisy o tym, ale nie rozwiązują one błędu na moim komputerze. Na przykład, SJuan76's answer to this posting sugeruje przejście na jpa 2.1, ale ustawiłem aspekt projektu eclipse jpa na wersję 2.1, a do mojego pliku pom.xml dodałem także hibernate-jpa-2.1-api. Możesz przeczytać wszystkie wersje różnych bibliotek w pełnym pom.xml by clicking on this link. Co muszę zmienić w projekcie pom.xml lub eclipse, aby rozwiązać ten błąd?

Uwaga: mogę pozbyć się błędów przez zmianę wersji hibernacji w pom.xml powrotem do <hibernate.version>4.2.1.Final</hibernate.version>, ale pokonuje cel modernizacji. Czy fakt, że zmiana wersji hibernacji włącza i wyłącza błąd pomaga nam zdiagnozować problem?

Jeśli problem polega na konflikcie wielu słoików, mógłbym użyć menedżera typów zaćmienia, aby wyłączyć jeden z słoików, ale którego słoika powinienem szukać?

Oto pełna ślad stosu:

ERROR ContextLoader - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/business-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) ~[spring-context-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) ~[spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) ~[spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) [spring-web-3.2.5.RELEASE.jar:3.2.5.RELEASE] 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) [catalina.jar:7.0.42] 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) [catalina.jar:7.0.42] 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.42] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) [catalina.jar:7.0.42] 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) [catalina.jar:7.0.42] 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) [na:1.7.0_45] 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_45] 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_45] 
    at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45] 
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.5.Final.jar:4.3.5.Final] 
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) ~[hibernate-core-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) ~[hibernate-entitymanager-4.3.5.Final.jar:4.3.5.Final] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) ~[spring-orm-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) ~[spring-orm-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) ~[spring-beans-4.0.6.RELEASE.jar:4.0.6.RELEASE] 
    ... 21 common frames omitted 
Oct 28, 2014 11:01:16 AM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [spring/business-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index; 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1553) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:973) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:750) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482) 
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389) 
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294) 
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112) 
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:744) 
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.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:850) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl$4.perform(EntityManagerFactoryBuilderImpl.java:843) 
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.withTccl(ClassLoaderServiceImpl.java:397) 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:842) 
    at org.hibernate.jpa.HibernatePersistenceProvider.createContainerEntityManagerFactory(HibernatePersistenceProvider.java:152) 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:336) 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549) 
... 21 more 
+0

może ten sam problem: http://stackoverflow.com/questions/20734540/nosuchmethoderror-in-javax-persistence-table-indexesljavax-persistence-index – pL4Gu33

+0

@ pL4Gu33 Już przeczytałem ten post. Pytanie i odpowiedź są związane ze strukturą gry, której nie używam w tym projekcie, więc myślę, że to jest inne pytanie, chyba że możesz pokazać konkretną rzecz, którą mogę zrobić w moim zaćmieniu, aby rozwiązać ten błąd. – CodeMed

+0

@ pL4Gu33 Właśnie dodałem notatkę w moim poście, że przełączenie wersji hibernacji może wyłączyć błąd, a następnie przywrócić błąd ponownie. Czy to pomaga w identyfikacji rozwiązania? – CodeMed

Odpowiedz

7

w moim przypadku winowajcą był JavaEE-api i glassfish libs, które nie obsługują JPA 2.1

+0

Szkoda, że ​​nie widziałem tego wcześniej! Tak, Glassfish 3 nie obsługuje formatu JPA 2.1: http://stackoverflow.com/q/18447541/2083907 – mbroshi

0

Najpierw musisz dowiedzieć się, które zależność przynosi złą JPA. Aby to zrobić, użyj zależności maven: tree. Dane wyjściowe są dość proste i można określić, co należy wykluczyć.

Aby wykluczyć zrobić coś takiego:

<dependencies> 
<dependency> 
    <groupId>sample.ProjectA</groupId> 
    <artifactId>Project-A</artifactId> 
    <version>1.0</version> 
    <scope>compile</scope> 
    <exclusions> 
    <exclusion> <!-- declare the exclusion here --> 
     <groupId>sample.ProjectB</groupId> 
     <artifactId>Project-B</artifactId> 
    </exclusion> 
    </exclusions> 
</dependency> 

Niestety nie mogę pomóc więcej, ale z informacji, które udostępniasz, to jest wszystko, co mogę zrobić.

Pozdrawiam.

0

Rozwiązałem ten sam problem w moim projekcie przez wykluczenie libli Hibernate ejb3, która została dołączona przez przechodniość zależności. Zależność od uzależnienia maven: drzewo był następujący:

[INFO] | +- org.hibernate:hibernate-annotations:jar:3.4.0.GA:compile 
[INFO] | | +- org.hibernate:ejb3-persistence:jar:1.0.2.GA:compile 

W moim projekcie, to było pierwotnie zawarte w słoiku wykonywalnego mój proces budowania wyprodukowanej za pośrednictwem wtyczki montażowej Maven. Do tego (i innych bibliotekami) wykluczyć, użyłem konfigurację dependencySet Wtyczka montaż w src/main/montaż/test-Jar-z-dependencies.xml:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> 
<id>test-jar-with-dependencies</id> 
<formats> 
    <format>jar</format> 
</formats> 
<includeBaseDirectory>false</includeBaseDirectory> 
<dependencySets>  
    <dependencySet> 
     <outputDirectory>/</outputDirectory> 
     <excludes> 
      <exclude>org.eclipse.persistence</exclude>   
      <exclude>org.hibernate:hibernate-annotations:jar:3.4.0.GA</exclude> 
      <exclude>org.hibernate:hibernate-commons-annotations:jar:3.1.0.GA</exclude> 
      <exclude>org.hibernate:ejb3-persistence</exclude> 
     </excludes> 
     <useProjectArtifact>true</useProjectArtifact> 
     <useProjectAttachments>true</useProjectAttachments> 
     <unpack>true</unpack> 
     <scope>test</scope> 
    </dependencySet> 
</dependencySets> 
</assembly> 

nadzieję, że pomoże!

+0

+1 i dziękuję za rozpatrzenie tego. Nadal nie rozwiązałem problemu, ale podchodzę do niego z innej strony w innym poście. Czy chcesz mi pomóc z innym ogłoszeniem? Podejrzewam, że rozwiązanie polega na wykryciu, które słoiki należy wykluczyć, i jakiej składni użyć w tym celu. Oto link: http://stackoverflow.com/questions/26789225/namedentitygraph- cannon-be-resolved-to-a-type – CodeMed

1

można importować plik hibernacji-jpa-2.1-api-1.0.0.Final.jar. to nie jest ejb3-persistence.jar.

1

W przypadku JBoss7, należy wymienić słoik API w jboss7/moduły/javax/wytrwałość/api z aktualizacją plik module.xml ze zaktualizowanym plikiem jar.

11

Jeśli używasz Jboss 7.1.1, JBoss ma już hibernate-jpa-2.0 w ścieżce klasy, więc podczas wykonywania wykorzystuje jeden w swojej ścieżce klas, a nie jeden już wdrożony z aplikacji, aby wskazać JBoss do hibernate-jpa-2.1 wykonaj następujące czynności:

  1. kopię hibernate-jpa-2.1-api-1.0.0.final.jar do następującego katalogu: jboss-as-7.1.1.Final/modules/javax/persistence/api/main

  2. otwarty module.xml i zmienić zasobów root następująco: resource-root path="hibernate-jpa-2.1-api-1.0.0.final.jar" (wskazuje to na JPA 2.1)

  3. przeprowadź ponowną kompilację i ponownie zainstaluj aplikację, a następnie dobrze jest przejść.

1

Spędziłem na tym dużo czasu.

Dla mnie było to konflikty javax.persistence.jar z hibernacją.

Usunąłem plik persistence.jar i zaczęło działać.

+0

to rozwiązanie działa u mnie – BlueBird

Powiązane problemy