Ich habe meine persistence.xml
mit dem gleichen Namen TopLink
unter dem META-INF
Verzeichnis. Dann habe ich meinen Code, der ihn aufruft mit:
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
Ich habe jedoch die folgende Fehlermeldung erhalten:
2009-07-21 09: 22: 41,018 [main] ERROR - Kein Persistenzanbieter für EntityManager mit dem Namen agisdb javax.persistence.PersistenceException: Kein Persistenzanbieter für EntityManager mit dem Namen agisdb at javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89) at javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)
Hier ist das persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="agisdb">
<class>com.agis.livedb.domain.AddressEntity</class>
<class>com.agis.livedb.domain.TrafficCameraEntity</class>
<class>com.agis.livedb.domain.TrafficPhotoEntity</class>
<class>com.agis.livedb.domain.TrafficReportEntity</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
Es sollte im Klassenpfad gewesen sein. Ich habe jedoch den obigen Fehler erhalten.
java
jpa
persistence
toplink
Robert A Henru
quelle
quelle
<provider/>
Hibernate-4 verwenden, sollten Sie Ihren Provider ändern<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
, siehe stackoverflow.com/questions/23041964/… .Fügen Sie das
"hibernate-entitymanager.jar"
in den Klassenpfad der Anwendung ein.Für neuere Versionen sollten Sie
"hibernate-core.jar"
anstelle der veralteten verwendenhibernate-entitymanager
Wenn Sie eine IDE wie Eclipse durchlaufen :
Project Properties -> Java Build Path -> Libraries.
Andernfalls setzen Sie es in die
/lib
Ihrer Anwendung.quelle
org.hibernate
Artefakthibernate-entitymanager
org.eclipse.persistence.jpa
mit Scope Test.Stellen Sie sicher, dass sich die
persistence.xml
Datei im Verzeichnis befindet:<webroot>/WEB-INF/classes/META-INF
quelle
Ich brauchte dies in meiner pom.xml-Datei:
quelle
Konfrontierte das gleiche Problem und konnte lange Zeit keine Lösung finden. In meinem Fall hat es geholfen zu ersetzen
mit
Nahm Lösung von hier
quelle
Es gibt noch einen weiteren Punkt: Wenn Sie in einer Eclipse RCP-Umgebung auf dieses Problem stoßen, müssen Sie möglicherweise die Factory-Generation von
Persistence.createEntityManagerFactory
auf ändernnew PersistenceProvider().createEntityManagerFactory
Eine ausführliche Diskussion hierzu finden Sie bei ECF .
quelle
Vielleicht haben Sie einen Anbieter wie definiert definiert,
<provider>org.hibernate.ejb.HibernatePersistence</provider>
aber einen anderen in jar referenziert. Das ist mir passiert: Mein persistence.xml-Provider war openjpa, aber ich habe eclipselink in meinem Klassenpfad verwendet. Ich hoffe das hilft!quelle
Schneller Rat:
Bei Verwendung von JPA in einer eigenständigen Anwendung (außerhalb von JavaEE) muss irgendwo ein Persistenzanbieter angegeben werden. Dies kann auf zwei Arten geschehen, die ich kenne:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
Fügen Sie entweder ein Provider-Element zur Persistenz-Einheit hinzu: (wie in der richtigen Antwort von Chris beschrieben: https://stackoverflow.com/a/1285436/784594 )In meinem Fall stellte ich fest, dass das Hibernate-Entitymanager-Jar aufgrund einer Maven-Fehlkonfiguration nicht als Abhängigkeit enthalten war, selbst wenn es sich um eine vorübergehende Abhängigkeit eines anderen Moduls handelte.
quelle
Wenn Sie Eclipse verwenden, stellen Sie sicher, dass das Ausschlussmuster Ihre nicht
persistence.xml
aus den Quellordnern im Erstellungspfad entfernt.MyProject/src/main/java -> Excluded: <your_pattern>
Baumknoten befindet
Excluded: (None)
den Knoten auswählen und links auf die Schaltfläche Bearbeiten ... klicken .quelle
Ich bin einige Jahre zu spät zur Party hier, aber ich habe die gleiche Ausnahme getroffen, als ich versucht habe, Hibernate 3.5.1 mit HSQLDB und einem Desktop-JavaFX-Programm zum Laufen zu bringen. Ich habe es mit Hilfe dieses Threads und viel Versuch und Irrtum zum Laufen gebracht. Es scheint, dass Sie diesen Fehler für eine ganze Reihe von Problemen erhalten:
Ich habe versucht, die Tutorial-Beispiele für den Ruhezustand zu erstellen, aber da ich Java 10 verwendet habe, konnte ich sie nicht einfach erstellen und ausführen. Ich gab das auf und wollte nicht wirklich Zeit damit verschwenden, seine Probleme zu beheben. Das Einrichten einer module-info.java-Datei (Jigsaw) ist ein weiterer Haarball, den viele Menschen noch nicht entdeckt haben.
Etwas verwirrend ist, dass dies (unten) die einzigen zwei Dateien waren, die ich in meiner build.gradle-Datei benötigte. In der Hibernate-Dokumentation ist nicht klar, welche Gläser Sie einschließen müssen. Entity-Manager sorgte für Verwirrung und ist in der neuesten Hibernate-Version nicht mehr erforderlich, ebenso wenig wie javax.persistence-api. Beachten Sie, dass ich hier Java 10 verwende, also musste ich die jaxb-api einschließen, um einige XML-Bindungsfehler zu umgehen, und einen Eintrag für das Java-Persistenzmodul in meine Datei module-info.java einfügen.
Build.gradle
Module-info.java
In Hibernate 5.3.1 müssen Sie den unten aufgeführten Anbieter nicht in Ihrer persistence.xml-Datei angeben. Wenn dies nicht der Fall ist, wird standardmäßig der Hibernate-Anbieter ausgewählt.
Die Datei persistence.xml sollte sich im richtigen Verzeichnis befinden, also:
Beim Durchlaufen des Quellcodes im Ruhezustand im Intellij-Debugger, in dem nach einem Dialekt gesucht wird, wurde aufgrund einer fehlenden Dialekteigenschaft in der Datei persistence.xml genau dieselbe Ausnahme ausgelöst. Ich habe dies hinzugefügt (fügen Sie das richtige für Ihren DB-Typ hinzu):
Danach habe ich immer noch die gleiche Ausnahme erhalten. Beim erneuten Durchlaufen des Debuggers in Intellij wurde festgestellt, dass in der Testentität, die ich beibehalten wollte (einfaches Eltern-Kind-Beispiel), Anmerkungen für die OneToMany- und ManyToOne-Beziehungen fehlten. Ich habe dies behoben und die Ausnahme ging weg und meine Entitäten blieben in Ordnung.
Hier ist meine vollständige endgültige persistence.xml:
Ich habe wahrscheinlich einen halben Tag mit diesem Juwel verschwendet. Mein Rat wäre, sehr einfach zu beginnen - eine einzelne Testentität mit einem oder zwei Feldern, da diese Ausnahme anscheinend viele Ursachen haben kann.
quelle
Eckfall: Wenn Sie m2Eclipse verwenden, werden automatisch Ausschlüsse in Ihre Ressourcenordner eingefügt. Wenn Sie dann versuchen, Tests in Eclipse auszuführen, führt das nachfolgende Fehlen von persistence.xml zu diesem Fehler.
quelle
Stellen Sie sicher, dass Sie die Datei persistence.xml im Ordner 'src' erstellt haben. Ich habe unter dem Projektordner erstellt und das war mein Problem.
quelle
Wenn Sie Maven verwenden, kann es sein, dass es nicht an der richtigen Stelle für den META-INF-Ordner sucht. Andere haben das Kopieren des Ordners erwähnt, aber eine andere Möglichkeit, die für mich funktioniert hat, bestand darin, Maven mithilfe des
<resources>
Tags mitzuteilen, wo er danach suchen soll . Siehe: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.htmlquelle
Dies geschieht, wenn der Entitätsmanager versucht, auf viele Persistenzeinheiten zu verweisen. Führen Sie die folgenden Schritte aus:
quelle
Ich hatte das gleiche Problem, aber auf EclipseLink Version 2.5.0 .
Ich habe mein Problem gelöst, indem ich noch eine weitere JAR-Datei hinzugefügt habe, die unbedingt vorhanden war ( javax.persistence_2.1.0.v201304241213.jar.jar ).
Benötigte Gläser:
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- jdbc.jar (abhängig von der verwendeten Datenbank).
Ich hoffe das hilft.
quelle
Ich hatte auch diesen Fehler, aber das Problem war der Namespace uri in der
persistence.xml
.Ich habe
http://xmlns.jcp.org/xml/ns/persistence
aufhttp://java.sun.com/xml/ns/persistence
und die Version 2.1 bis 2.0 ersetzt.Es funktioniert jetzt.
quelle
Sie müssen den Ruhezustand-entitymanager-x.jar im Klassenpfad hinzufügen.
Wenn in Hibernate 4.x die JAR vorhanden ist, muss die Datei org.hibernate.ejb.HibernatePersistence nicht in der Datei persistence.xml hinzugefügt werden.
quelle
Die Frage wurde bereits beantwortet, wollte aber nur einen Tipp posten, der mich aufhielt. Diese Ausnahme wurde nach vorherigen Fehlern ausgelöst. Ich bekam das:
Obwohl ich die persistence.xml so geändert hatte, dass sie den neuen Eigenschaftsnamen enthält:
Nach der Meldung über den veralteten Eigenschaftsnamen erhielt ich dieselbe PersistenceException wie oben und eine ganze Reihe anderer Ausnahmen. Mein Tipp: Überprüfen Sie unbedingt den Beginn der Ausnahmewurst.
In Glassfish v2.1.1 scheint es einen Fehler zu geben, bei dem durch erneutes Bereitstellen oder Nicht-Bereitstellen und Bereitstellen die persistence.xml nicht aktualisiert wird, die irgendwo zwischengespeichert wird. Ich musste den Server neu starten und dann funktionierte es.
quelle
In einem OSGi-Kontext ist es erforderlich, Ihre Persistenzeinheiten in MANIFEST.MF des Bundles aufzulisten, z
Andernfalls weiß das JPA-Bundle nicht, dass Ihr Bundle Persistenzeinheiten enthält.
Siehe http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .
quelle
Sie benötigen die folgenden JAR-Dateien im Klassenpfad:
quelle
Ich habe gerade die META-INF in src kopiert und gearbeitet!
quelle
Ruhezustand 5.2.5
Jar-Dateien Erforderlich im Klassenpfad. Dies befindet sich in einem erforderlichen Ordner von Hibernate 5.2.5 Final Release. Es kann von http://hibernate.org/orm/downloads/ heruntergeladen werden.
Erstellen Sie eine XML-Datei "persistence.xml" in
YourProject / src / META-INF / persistence.xml
persistence.xml
EntityManagerFactor = Persistance.createEntityManagerFactory ("Beispiel"); . "sample" kann gemäß Ihrer Namenskonvention geändert werden.
Erstellen Sie nun eine Entitätsklasse. mit Namen gemäß meinem Beispiel UserDetail im Paket org.pramod.data.object
UserDetail.java
Erstellen Sie nun eine Klasse mit der Hauptmethode.
HibernateTest.java
Ausgabe wird sein
quelle
In meinem Fall habe ich zuvor die Idee verwendet, um eine Entität anhand eines Datenbankschemas zu generieren. Die Entität
persistence.xml
wird automatisch in generiertsrc/main/java/META-INF
und gemäß https://stackoverflow.com/a/23890419/10701129 wird sie in diesrc/main/resources/META-INF
ebenfalls als META-INF gekennzeichnete Entität verschoben Quellwurzel. Für mich geht das.Aber nur das ursprüngliche META-INF (dh src / main / java / META-INF) einfach als Quellwurzel zu markieren, funktioniert nicht, was mich verwirrt.
und das ist die Struktur:
quelle
Wenn
Persistence.createEntityManagerFactory("JPAService")
in verschiedenen Klassen unterschiedliche Namen vorhanden sind , wird der Fehler angezeigt. Durch Refactoring ist es möglich, verschiedene Namen zu erhalten, was in meinem Fall der Fall war. In einer Klasse der automatisch generiertePersistence.createEntityManagerFactory("JPAService")
inprivate void initComponents()
, ContactsTable Klasse von unterschied sichPersistence.createEntityManagerFactory("JPAServiceExtended")
in DBManager Klasse.quelle
Meins wurde gelöst, indem Informationen in persistence.xml hinzugefügt wurden, z. B.
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
und dann sichergestellt wurde, dass sich die Bibliothek im Klassenpfad befindet, z. B. in Mavenquelle
Überprüfen Sie den Namen der beständigen Einheit
quelle
In meinem Fall handelte es sich um einen Fehler in zwei Eigenschaften wie unten. Als ich sie änderte, verschwand "Kein Persistenzanbieter für EntityManager".
Sie können also versuchen, die Verbindung mit Ihren Eigenschaften zu testen, um zu überprüfen, ob alles korrekt ist.
Seltsamer Fehler, ich war deswegen total verwirrt.
quelle
Versuchen Sie auch, die Datei persistence.xml manuell in den Ordner zu kopieren
<project root>\bin\META-INF
. Dies behebt das Problem in Eclipse Neon mit derEclipseLink 2.5.2
Verwendung eines einfachen Plug-In-Projekts.quelle
Hatte das gleiche Problem, aber das hat tatsächlich bei mir funktioniert:
NB: Mit dem obigen Befehl maven werden alle Projektabhängigkeiten von Grund auf neu installiert. Ihre Konsole wird aufgrund der Netzwerkanforderung, die der Maven erstellt, mit ausführlichen Protokollen geladen.
quelle