Errore durante la creazione di bean con nome ‘entityManagerFactory

Sto cercando di eseguire un dbtest ma ottengo il seguente errore:

“Causato da: org.springframework.beans.factory.BeanCreationException: errore nella creazione di bean con nome ‘entityManagerFactory’ definito nella risorsa percorso class [root-context.xml]: Invocazione del metodo init non riuscita; l’eccezione nidificata è java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.getValidationMode () Ljavax / persistenza / ValidationMode;”

E a causa di ciò ho anche il seguente errore:

“Causato da: org.springframework.beans.factory.BeanCreationException: Errore nella creazione di bean con nome ‘personRepository’ definito nella risorsa del percorso di class [root-context.xml]: Inizializzazione di bean non riuscita; l’eccezione nidificata è org.springframework.beans.factory .BeanCreationException: errore nella creazione di bean con nome ‘entityManagerFactory’ definito nella risorsa percorso class [root-context.xml]: Invocazione del metodo init non riuscita; l’eccezione nidificata è java.lang.AbstractMethodError: org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo .getValidationMode () Ljavax / persistenza / ValidationMode;

Quindi dobbiamo prendere in considerazione il mio file di contesto root e sembra il seguente:

  <!-- Root Context: defines shared resources visible to all other web components  -->                   

E il persisence.xml sembra il seguente:

   org.hibernate.ejb.HibernatePersistence        

E questo è il mio file pom.xml:

   4.0.0 se.lowdin civilforsvaret civilforsvaret-webbapp war 1.0.0-BUILD-SNAPSHOT  1.6 3.1.1.RELEASE 1.6.10 1.6.6     org.springframework spring-context ${org.springframework-version}    commons-logging commons-logging     org.springframework spring-webmvc ${org.springframework-version}    org.aspectj aspectjrt ${org.aspectj-version}    mysql mysql-connector-java 5.1.24    org.slf4j slf4j-api ${org.slf4j-version}   org.slf4j jcl-over-slf4j ${org.slf4j-version} runtime   org.slf4j slf4j-log4j12 ${org.slf4j-version} runtime   log4j log4j 1.2.15   javax.mail mail   javax.jms jms   com.sun.jdmk jmxtools   com.sun.jmx jmxri   runtime    javax.inject javax.inject 1    javax.servlet servlet-api 2.5 provided   javax.servlet.jsp jsp-api 2.1 provided   javax.servlet jstl 1.2    junit junit 4.7 test   org.easymock easymock 3.1   org.hibernate hibernate-entitymanager 4.3.0.CR1   com.h2database h2 1.3.174   org.springframework spring-test 3.2.5.RELEASE   org.springframework spring-jpa 2.0.8   org.springframework spring-jdbc 3.2.5.RELEASE   org.springframework.data spring-data-jpa 1.4.2.RELEASE   org.hibernate.javax.persistence hibernate-jpa-2.0-api 1.0.1.Final      maven-eclipse-plugin 2.9   org.springframework.ide.eclipse.core.springnature   org.springframework.ide.eclipse.core.springbuilder  true true    org.apache.maven.plugins maven-compiler-plugin 2.5.1  1.6 1.6 -Xlint:all true true    org.codehaus.mojo exec-maven-plugin 1.2.1  org.test.int1.Main      

Sono un noob completo con Spring MVC e non riesco a trovare il problema.

Sembra un conflitto ClassLoader. Scommetto che hai javax.persistence api 1.x sul classpath da qualche parte, mentre Spring sta cercando di accedere a ValidationMode , che è stato introdotto solo in JPA 2.0.

Dato che usi Maven, fai la mvn dependency:tree , trova l’artefatto:

  javax.persistence persistence-api 1.0  

E rimuovilo dalla tua configurazione. (Vedi Esclusione di dipendenze )

AFAIK non esiste una distribuzione generale di questo tipo per JPA 2, ma è ansible utilizzare questa versione specifica di Hibernate:

  org.hibernate.javax.persistence hibernate-jpa-2.0-api 1.0.1.Final  

OK, dal momento che non funziona, sembra che ci sia ancora qualche versione di JPA-1 da qualche parte. In un metodo di prova, aggiungi questo codice:

 System.out.println(EntityManager.class.getProtectionDomain() .getCodeSource() .getLocation()); 

Guarda dove ti punta e sbarazzati di quell’artefatto.


Ah, ora finalmente vedo il problema. Sbarazzati di questo:

  org.springframework spring-jpa 2.0.8  

e sostituirlo con

  org.springframework spring-orm 3.2.5.RELEASE  

Su una nota diversa, dovresti impostare tutte le librerie di test (spring test, easymock ecc.) Su

 test 

L’aggiunta di dipendenze non ha risolto il problema alla mia estremità.

Il problema stava accadendo alla fine a causa dei campi “aggiuntivi” che fanno parte della class “@Entity” e non esistono nel database.

Ho rimosso i campi aggiuntivi dalla class @Entity e ha funzionato.