Nessun provider di Persistenza per EntityManager denominato

Ho il mio persistence.xml con lo stesso nome, usando toplink, sotto la directory META-INF. Poi ho il mio codice che lo chiama con:

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); 

Eppure, ho ricevuto il seguente messaggio di errore

 2009-07-21 09: 22: 41,018 [principale] ERRORE: nessun provider di persistenza per EntityManager denominato agisdb
 javax.persistence.PersistenceException: nessun provider di persistenza per EntityManager denominato agisdb
     a javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89)
     a javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)

Ecco il persistence.xml:

    com.agis.livedb.domain.AddressEntity com.agis.livedb.domain.TrafficCameraEntity com.agis.livedb.domain.TrafficPhotoEntity com.agis.livedb.domain.TrafficReportEntity         

Dovrebbe essere nel classpath. Eppure, ho ricevuto l’errore di cui sopra.

Dopo , definire il nome del provider di persistenza:

 org.hibernate.ejb.HibernatePersistence 

Metti "hibernate-entitymanager.jar" nel classpath dell’applicazione.
Per le versioni più recenti, dovresti usare "hibernate-core.jar" invece del deprecato hibernate-entitymanager

Se stai utilizzando IDE, ad esempio Eclipse : Project Properties -> Java Build Path -> Libraries.

Altrimenti, mettilo nella /lib della tua applicazione.

Assicurati che il file persistence.xml si trovi nella directory: /WEB-INF/classs/META-INF

Ne avevo bisogno nel mio file pom.xml:

  org.hibernate hibernate-entitymanager 4.2.6.Final  

Forse hai definito un provider come org.hibernate.ejb.HibernatePersistence ma facendo riferimento a un altro in jar. È successo con me: il mio provider persistence.xml era openjpa ma stavo usando eclipselink nel mio classpath. Spero che questo aiuto!

C’è un altro punto: se si affronta questo problema in un ambiente Eclipse RCP, potrebbe essere necessario cambiare la generazione di Factory da Persistence.createEntityManagerFactory a new PersistenceProvider().createEntityManagerFactory

vedere ECF per una discussione dettagliata su questo.

Ha affrontato lo stesso problema e non è riuscito a trovare una soluzione per un periodo piuttosto lungo. Nel mio caso ha aiutato a sostituire

 org.hibernate.ejb.HibernatePersistence 

con

 org.hibernate.jpa.HibernatePersistenceProvider 

Ha preso la soluzione da qui

Consiglio rapido:

  • controlla se persistence.xml è nel tuo classpath
  • controlla se il provider di ibernazione è nel tuo classpath

Con l’utilizzo di JPA in applicazioni standalone (al di fuori di JavaEE), è necessario specificare un provider di persistenza da qualche parte. Questo può essere fatto in due modi che conosco:

Nel mio caso, ho scoperto che a causa di errata configurazione di Maven, il jar hibernate-entitymanager non era incluso come dipendenza, anche se si trattava di una dipendenza temporanea di un altro modulo.

Se stai usando Eclipse assicurati che il pattern di esclusione non rimuova il tuo persistence.xml dalle cartelle di origine sul percorso di generazione.

  1. Vai a Proprietà -> Percorso build Java -> scheda Origine
  2. Controlla il tuo modello di esclusione che si trova a
    MyProject/src/main/java -> Excluded:
    nodo dell’albero
  3. Opzionalmente, Excluded: (None) su Excluded: (None) selezionando il nodo e facendo clic sul pulsante Modifica … a sinistra.

Caso d’angolo: se si utilizza m2Eclipse, inserisce automaticamente le eccezioni nelle cartelle delle risorse. Quindi quando si tenta di eseguire test all’interno di eclipse, la successiva assenza di persistence.xml produrrà questo errore.

Assicurati di aver creato il file persistence.xml nella cartella ‘src’. Ho creato sotto la cartella del progetto e quello era il mio problema.

Succede quando il gestore di quadro sta tentando di puntare a molte unità di persistenza. Effettuare le seguenti operazioni:

  1. apri il file correlato nel tuo editor (a condizione che il tuo progetto sia stato chiuso nel tuo IDE)
  2. elimina tutto il codice relativo alla persistenza e al gestore quadro
  3. salva il file
  4. apri il progetto nel tuo IDE
  5. ora lega il db o il tavolo di tua scelta

Ho affrontato lo stesso problema, ma su EclipseLink versione 2.5.0 .

Ho risolto il problema aggiungendo un altro file jar che era necessariamente ( javax.persistence_2.1.0.v201304241213.jar.jar );

Barattoli necessari:
– javax.persistence_2.1.0.v201304241213.jar
– eclipselink.jar
– jdbc.jar (a seconda del database utilizzato).

Spero che aiuti.

Ho anche avuto questo errore ma il problema era lo spazio dei nomi uri nel persistence.xml .

Ho sostituito http://xmlns.jcp.org/xml/ns/persistence in http://java.sun.com/xml/ns/persistence e dalla versione 2.1 alla 2.0.

Funziona ora.

È necessario aggiungere hibernate-entitymanager-x.jar nel classpath.

In Hibernate 4.x, se è presente il jar, non è necessario aggiungere org.hibernate.ejb.HibernatePersistence nel file persistence.xml.

La domanda ha già avuto risposta, ma volevo solo pubblicare un suggerimento che mi trattenesse. Questa eccezione veniva lanciata dopo errori precedenti. Stavo ricevendo questo:

 property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead. 

Anche se avevo cambiato il persistence.xml per includere il nuovo nome della proprietà:

  

Seguendo il messaggio sul nome della proprietà deprecato stavo ottenendo la stessa PersistenceException come sopra e un’intera altra stringa di eccezioni. Il mio consiglio: assicurati di controllare l’inizio della salsiccia di eccezione.

Sembra esserci un bug in Glassfish v2.1.1 dove redeploys o undeploys e deploys non stanno aggiornando il persistence.xml, che viene memorizzato nella cache da qualche parte. Ho dovuto riavviare il server e poi ha funzionato.

In un contesto OSGi, è necessario elencare le unità di persistenza nel MANIFEST.MF del bundle, ad es.

 JPA-PersistenceUnits: my-persistence-unit 

Altrimenti, il bundle JPA non saprà che il tuo bundle contiene unità di persistenza.

Vedi http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .

Sono necessari i seguenti file jar nel classpath:

  1. ANTLR-2.7.6.jar
  2. Commons-collezioni-3.1.jar
  3. dom4j-1.6.1.jar
  4. hibernate-Commons-annotazioni-4.0.1.Final.jar
  5. hibernate-core-4.0.1.Final.jar
  6. hibernate-entitymanager.jar
  7. hibernate-APP-2.0-api-1.0.0.Final.jar
  8. javassist-3.9.0.jar
  9. jboss-logging-3.1.1.GA.jar
  10. JTA-1.1.jar
  11. slf4j-api-1.5.8.jar
  12. xxx-JDBC-driver.jar

Ho appena copiato il META-INF in src e ho lavorato!

Hibernate 5.2.5
Jar Files richiesti nel percorso della class. Questo è all’interno di una cartella richiesta della versione finale di Hibernate 5.2.5. Può essere scaricato da http://hibernate.org/orm/downloads/

  1. ANTLR-2.7.7
  2. cdi-API-1.1
  3. compagno di class-1.3.0
  4. dom4j-1.6.1
  5. el-API-2.2
  6. geronimo-jta_1.1_spec-1.1.1
  7. hibernate-commons-annotation-5.0.1.Final
  8. hibernate-core-5.2.5.Final
  9. hibernate-jpa-2.1-api-1.0.0.Final
  10. jandex-2.0.3.Final
  11. javassist-3.20.0-GA
  12. javax.inject-1
  13. jboss-intercettore-api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.Final
  15. jsr250-api-1.0

Creare un file xml “persistence.xml” in

ProgettoUtente / src / META-INF / persistence.xml

persistence.xml

 < ?xml version="1.0" encoding="UTF-8"?>   org.pramod.data.object.UserDetail true              

  1. si prega di annotare le informazioni menzionate nel tag e la versione dovrebbe essere 2.1.
  2. si prega di notare il nome tag, il nome è citato come “campione” . Questo nome deve essere utilizzato esattamente nello stesso modo durante il caricamento del tuo

EntityManagerFactor = Persistance.createEntityManagerFactory (“sample”); . “campione” può essere modificato secondo la convenzione di denominazione.

Ora crea una class Entity. con nome come nel mio esempio UserDetail, nel pacchetto org.pramod.data.object

UserDetail.java

 package org.pramod.data.object; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name = "user_detail") public class UserDetail { @Id @Column(name="user_id") private int id; @Column(name="user_name") private String userName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } @Override public String toString() { return "UserDetail [id=" + id + ", userName=" + userName + "]"; } } 

Ora crea una class con il metodo principale.

HibernateTest.java

 package org.pramod.hibernate; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.pramod.data.object.UserDetail; public class HibernateTest { private static EntityManagerFactory entityManagerFactory; public static void main(String[] args) { UserDetail user = new UserDetail(); user.setId(1); user.setUserName("Pramod Sharma"); try { entityManagerFactory = Persistence.createEntityManagerFactory("sample"); EntityManager entityManager = entityManagerFactory.createEntityManager(); entityManager.getTransaction().begin(); entityManager.persist( user ); entityManager.getTransaction().commit(); System.out.println("successfull"); entityManager.close(); } catch (Exception e) { e.printStackTrace(); } } } 

L’output sarà

 UserDetail [id=1, userName=Pramod Sharma] Hibernate: drop table if exists user_details Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id)) Hibernate: insert into user_details (user_name, user_id) values (?, ?) successfull 

Se stai usando Maven, potrebbe essere che non stia guardando nel posto giusto per la cartella META-INF. Altri hanno menzionato la copia della cartella, ma un altro modo per me è stato di dire a Maven dove cercarlo, usando il tag . Vedi: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

Sono in ritardo di qualche anno qui, ma ho riscontrato la stessa eccezione mentre cercavo di far funzionare Hibernate 3.5.1 con HSQLDB e un programma JavaFX desktop. Ho avuto modo di lavorare con l’aiuto di questo thread e un sacco di tentativi ed errori. Sembra che tu riceva questo errore per tutta una serie di problemi:

 No Persistence provider for EntityManager named mick 

Ho provato a creare gli esempi di tutorial di ibernazione, ma poiché stavo usando Java 10 non ero in grado di farli build ed eseguire facilmente. Ho rinunciato a questo, non volendo davvero perdere tempo a risolvere i suoi problemi. L’impostazione di un file module-info.java (Jigsaw) è un’altra palla di pelo che molte persone non hanno ancora scoperto.

Un po ‘di confusione è che questi (sotto) erano gli unici due file di cui avevo bisogno nel mio file build.gradle. La documentazione di Hibernate non è chiara su esattamente quali jar devi includere. Entity-manager stava causando confusione e non è più richiesto nell’ultima versione di Hibernate, e nessuno dei due è javax.persistence-api. Nota, sto usando Java 10 qui, quindi ho dovuto includere il jaxb-api, per aggirare alcuni errori xml-binding, così come aggiungere una voce per il modulo java persistence nel mio file module-info.java.

Build.gradle

 // https://mvnrepository.com/artifact/org.hibernate/hibernate-core compile('org.hibernate:hibernate-core:5.3.1.Final') // https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0' 

Module-info.java

 // Used for HsqlDB - add the hibernate-core jar to build.gradle too requires java.persistence; 

Con ibernazione 5.3.1 non è necessario specificare il provider, di seguito, nel proprio file persistence.xml. Se non ne viene fornito uno, il fornitore di Hibernate viene scelto per impostazione predefinita.

 org.hibernate.jpa.HibernatePersistenceProvider 

Il file persistence.xml dovrebbe trovarsi nella directory corretta in modo tale:

 src/main/resources/META-INF/persistence.xml 

Passando attraverso il codice sorgente di ibernazione nel debugger Intellij, dove controlla la presenza di un dialetto, si ottiene anche la stessa identica eccezione, a causa di una proprietà dialettica mancante nel file persistence.xml. Ho aggiunto questo (aggiungi quello corretto per il tuo tipo di DB):

  

Ho ancora ottenuto la stessa eccezione dopo questo, quindi passare nuovamente il debugger in Intellij ha rivelato che l’ quadro di test che stavo cercando di persistere (semplice esempio genitore-figlio) aveva delle annotazioni mancanti per le relazioni OneToMany, ManyToOne. Ho risolto questo problema e l’eccezione è andata via e le mie quadro sono state mantenute ok.

Ecco il mio persence.xml finale completo:

    Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide   com.micks.scenebuilderdemo.database.Parent com.micks.scenebuilderdemo.database.Child            

Probabilmente ho sprecato circa mezza giornata in questa gem. Il mio consiglio sarebbe di iniziare in modo molto semplice: una singola quadro di test con uno o due campi, poiché sembra che questa eccezione possa avere molte cause.

Se in Persistence.createEntityManagerFactory("JPAService") esistono nomi diversi in classi diverse rispetto all’errore. Con il refactoring è ansible ottenere nomi diversi nel mio caso. In una class, Persistence.createEntityManagerFactory("JPAService") generato automaticamente in private void initComponents() , la class ContactsTable differiva da Persistence.createEntityManagerFactory("JPAServiceExtended") nella class DBManager.

Il mio è stato risolto aggiungendo informazioni in persistence.xml ad esempio org.eclipse.persistence.jpa.PersistenceProvider e quindi assicurandosi di avere la libreria su classpath, ad es. In Maven aggiungi dipendenza come

  org.eclipse.persistence eclipselink 2.5.0