Kein Persistenzanbieter für EntityManager benannt

148

Ich habe meine persistence.xmlmit dem gleichen Namen TopLinkunter dem META-INFVerzeichnis. 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.

Robert A Henru
quelle

Antworten:

85

Nach dem <persistence-unit name="agisdb">Definieren der Persistenz - Provider Name:

<provider>org.hibernate.ejb.HibernatePersistence</provider>
Dave Jarvis
quelle
5
Ich verwende Derby und es war nicht erforderlich, dies anzugeben (ich habe es getan, aber dann entfernt, sobald ich das Problem gelöst habe, nur um sicherzugehen). Ich habe den Fehler endlich erhalten, weil sich persistence.xml nicht im Ordner src / META-INF befand, obwohl er sich in einem Ordner im Eclipse-Quellpfad für das Projekt befand. Ich denke, irgendwo ist es fest verdrahtet, auf src / * zu sein
Fuhrmanator
6
Dies war in meinem Fall nicht erforderlich, aber ein Klassenpfad für den Ruhezustand-Entity-Manager * .jar, wie in der Antwort von Ualter Jr. unten angegeben. Ich verwende eine eigenständige GWT-App mit hibernate-core-4.3.7.jar , hibernate-entitymanager-4.3.7.Final.jar und hibernate-jpa-2.1-api-1.0.0.jar .
Andreas Dietrich
3
Wie bei @AndreasDietrich ist dieser Fehler nach dem Ersetzen des Artefakts "hibernate-core-4.3.10" durch "hibernate-entitymanager-4.3.10" in pom.xml (ich verwende maven) verschwunden. Eigentlich hibernate.org/orm/downloads sagt , dass Sie sollten "Hibernate-EntityManager-4.3.10" verwenden für JPA.
Hong
1
Abgesehen davon musste ich auch von Hibernate-entitymanager-3.4.0.GA auf 3.6.10.Final aufsteigen . Nur für den Fall, dass Sie noch eine alte Codebasis mit Hibernate 3 haben.
Javi Vazquez
5
Ich bin ein bisschen überrascht, dass Sie kein Problem mit Ihrem haben. Wenn Sie <provider/>Hibernate-4 verwenden, sollten Sie Ihren Provider ändern <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>, siehe stackoverflow.com/questions/23041964/… .
Rob
86

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 /libIhrer Anwendung.

Ualter Jr.
quelle
3
Ich habe ein paar Stunden gebraucht, um herauszufinden, dass dies die Ursache war. Für andere Leute, die nach diesem blutigen Glas suchen, ist es im Fall von Hibernate 4.1.3 in Hibernate-release-4.1.3.Final \ lib \ jpa \ hibernate-entitymanager-4.1.3.Final.jar
Vedran
7
Und für diejenigen von uns, die Maven verwenden, wäre das ein Groupid- org.hibernateArtefakthibernate-entitymanager
Simon Forsberg,
2
Es war für mich eclipselink.jar, was im Pfad fehlte. Kein Ruhezustand * etwas.jar auf dem Weg überhaupt.
Benutzer unbekannt
3
Ich habe nur ein paar Stunden damit verbracht, zu bestätigen, dass persistence.xml auf dem Klassenpfad ist, und jede Facette eines Projekts, für das dies funktioniert hat, mit einem Projekt zu vergleichen, für das es nicht funktioniert hat. Sehr irreführende Fehlermeldung, da dies passieren kann, wenn persistence.xml fehlt, wenn die PU mit diesem Namen fehlt oder anscheinend wenn ein JAR im Ruhezustand fehlt!
David Mann
Für mich war es org.eclipse.persistence.jpamit Scope Test.
Marek
67

Stellen Sie sicher, dass sich die persistence.xmlDatei im Verzeichnis befindet:<webroot>/WEB-INF/classes/META-INF

user225932
quelle
8
Dies funktionierte nicht für mich, brachte die Persistenz-Einheit nicht gefunden: 'null' Fehler. Verschieben Sie es zurück zu /src/main/resources/META-INF/persistence.xml
tomasb
1
Ich denke, dies gilt für diejenigen, die Topplink (oder andere webbezogene Dinge ) verwenden, für alle anderen sind andere Antworten hier möglicherweise angemessener.
Simon Forsberg
2
Danke, für mich ist der Pfad Ziel / Klassen / META-INF
Frizz1977
Aus irgendeinem seltsamen Grund muss es sich in einem META-INF-Verzeichnis befinden, sonst funktioniert es nicht ...
Thomas
17

Ich brauchte dies in meiner pom.xml-Datei:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version>
</dependency>
Technokrat
quelle
Funktioniert für Version 4.3.11.
Petertc
Es ist veraltet, siehe oben. Verwenden Sie stattdessen den Ruhezustand.
foo
16

Konfrontierte das gleiche Problem und konnte lange Zeit keine Lösung finden. In meinem Fall hat es geholfen zu ersetzen

<provider>org.hibernate.ejb.HibernatePersistence</provider>

mit

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Nahm Lösung von hier

Sneg
quelle
2
Ein Upgrade von Hibernate 4.3.5 auf 5.2.12 und diese Änderung des Anbieternamens haben das Problem für mich behoben. Diese Einstellung scheint es JPA zu ermöglichen, die Core-JAR-Datei anstelle der Entity-Manager-JAR-Datei zu verwenden, die im zentralen Maven-Repository als veraltet angezeigt wird. Vielen Dank für das Teilen.
Joshpt
10

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.createEntityManagerFactoryauf ändernnew PersistenceProvider().createEntityManagerFactory

Eine ausführliche Diskussion hierzu finden Sie bei ECF .

col.panic
quelle
Dies war genau das Problem, das ich mit org.eclipse.persistence.jpa 2.4.0 hatte. Ich verbrachte buchstäblich 2 Stunden damit, mir die Haare auszureißen und mich zu fragen, warum meine persisence.xml nicht gefunden werden konnte. Alle Beispiele scheinen dies nicht zu berücksichtigen. na ja ... vielen vielen dank!
Mark Miller
9

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!

Gilberto
quelle
7

Schneller Rat:

  • Überprüfen Sie, ob sich persistence.xml in Ihrem Klassenpfad befindet
  • Überprüfen Sie, ob sich der Hibernate-Anbieter in Ihrem Klassenpfad befindet

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 )
  • oder Anbieter für die Schnittstelle javax.persistence.spi.PersistenceProvider muss als Dienst angegeben werden, siehe hier: http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (dies ist normalerweise der Fall Wird eingeschlossen, wenn Sie den Ruhezustand oder eine andere JPA-Implementierung in Ihren Klassenpfad aufnehmen

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.

OndroMih
quelle
/ facepalm - Ich habe vergessen, die Maven-Abhängigkeit für den Hibernate-Anbieter hinzuzufügen. Danke dir!
Jgitter
5

Wenn Sie Eclipse verwenden, stellen Sie sicher, dass das Ausschlussmuster Ihre nicht persistence.xmlaus den Quellordnern im Erstellungspfad entfernt.

  1. Gehen Sie zu Eigenschaften -> Java-Erstellungspfad -> Registerkarte Quelle
  2. Überprüfen Sie Ihr Ausschlussmuster, das sich am
    MyProject/src/main/java -> Excluded: <your_pattern>
    Baumknoten befindet
  3. Optional können Sie Excluded: (None)den Knoten auswählen und links auf die Schaltfläche Bearbeiten ... klicken .
wypieprz
quelle
Mein Problem gelöst. Das ausgeschlossene Muster wurde nach einem Abrufen / Ziehen auf "**" gesetzt. Ich weiß nicht warum ...
Jocelyn
5

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:

No Persistence provider for EntityManager named mick

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

// 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;

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.

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Die Datei persistence.xml sollte sich im richtigen Verzeichnis befinden, also:

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

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):

<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>

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:

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
            http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
         version="2.1">

<persistence-unit name="mick" transaction-type="RESOURCE_LOCAL">
    <description>
        Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
    </description>

    <!-- Provided in latest release of hibernate
    <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
    -->

    <class>com.micks.scenebuilderdemo.database.Parent</class>
    <class>com.micks.scenebuilderdemo.database.Child</class>

    <properties>
        <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/>

        <property name="javax.persistence.jdbc.url"
                  value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>

        <property name="javax.persistence.jdbc.user" value="sa"/>
        <property name="javax.persistence.jdbc.password" value=""/>

        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.hbm2ddl.auto" value="create"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
    </properties>

</persistence-unit>

</persistence>

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.

MickG
quelle
Vielen Dank für die Konfigurationsdetails.
Doogle
4

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.

rauben
quelle
3

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.

Harcharan
quelle
Eclipse 4.4.0 möchte keine SRC-Ordner verschachteln, daher habe ich META-INF auf die oberste Ebene gestellt, da ich dachte, dass persistence.xml im Klassenpfad angemessen wäre. NICHT! Ich musste manuell eine src / META-INF (im Betriebssystem) erstellen und die Datei persistence.xml von Hand verschieben. Vielleicht ist es möglich, dies in Eclipse zu tun, aber ich konnte es nicht herausfinden.
Fuhrmanator
2

Dies geschieht, wenn der Entitätsmanager versucht, auf viele Persistenzeinheiten zu verweisen. Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die zugehörige Datei in Ihrem Editor (vorausgesetzt, Ihr Projekt wurde in Ihrer IDE geschlossen).
  2. Löschen Sie den gesamten Code für Persistenz und Entitätsmanager
  3. Speicher die Datei
  4. Öffnen Sie das Projekt in Ihrer IDE
  5. Binden Sie nun die Datenbank oder Tabelle Ihrer Wahl
Mahesh
quelle
2

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.

EX
quelle
2

Ich hatte auch diesen Fehler, aber das Problem war der Namespace uri in der persistence.xml.

Ich habe http://xmlns.jcp.org/xml/ns/persistenceauf http://java.sun.com/xml/ns/persistenceund die Version 2.1 bis 2.0 ersetzt.

Es funktioniert jetzt.

Ludovic Guillaume
quelle
Genau das ist mir mit Tomcat passiert. Ich habe gerade einen vollständigen Header hinzugefügt, um neue Benutzer zu verdeutlichen
childno͡.de
2

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.

Vijayinani
quelle
1

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:

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

Obwohl ich die persistence.xml so geändert hatte, dass sie den neuen Eigenschaftsnamen enthält:

<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>

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.

Rónán Ó Braonáin
quelle
1

Sie benötigen die folgenden JAR-Dateien im Klassenpfad:

  1. antlr-2.7.6.jar
  2. commons-collection-3.1.jar
  3. dom4j-1.6.1.jar
  4. Hibernate-Commons-Annotations-4.0.1.Final.jar
  5. hibernate-core-4.0.1.Final.jar
  6. hibernate-entitymanager.jar
  7. hibernate-jpa-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
Ja
quelle
1

Ich habe gerade die META-INF in src kopiert und gearbeitet!

Zakaria Bouazza
quelle
1

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.

  1. antlr-2.7.7
  2. cdi-api-1.1
  3. Klassenkamerad-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-interceptor-api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.Final
  15. jsr250-api-1.0

Erstellen Sie eine XML-Datei "persistence.xml" in

YourProject / src / META-INF / persistence.xml

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
         version="2.1">

<persistence-unit name="sample">

    <class>org.pramod.data.object.UserDetail</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/>
        <property name="hibernate.connection.username" value="root"/>
        <property name="hibernate.connection.password" value="root"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="false"/>

        <property name="hibernate.cache.use_second_level_cache" value="false"/>

        <property name="hibernate.archive.autodetection" value="true"/>
    </properties>
</persistence-unit>

  1. Bitte notieren Sie sich die Informationen im <persistance> -Tag und die Version sollte 2.1 sein.
  2. Bitte beachten Sie das Name <Persistance-Unit> -Tag, der Name wird als "Beispiel" angegeben . Dieser Name muss beim Laden Ihres genau gleich verwendet werden

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

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 + "]";
    }
}

Erstellen Sie nun eine Klasse mit der Hauptmethode.

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();
        }

    }

}

Ausgabe wird sein

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
Prayag Sharma
quelle
1

In meinem Fall habe ich zuvor die Idee verwendet, um eine Entität anhand eines Datenbankschemas zu generieren. Die Entität persistence.xmlwird automatisch in generiert src/main/java/META-INFund gemäß https://stackoverflow.com/a/23890419/10701129 wird sie in die src/main/resources/META-INFebenfalls 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: Geben Sie hier die Bildbeschreibung ein

fooool
quelle
0

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 generierte Persistence.createEntityManagerFactory("JPAService")in private void initComponents(), ContactsTable Klasse von unterschied sich Persistence.createEntityManagerFactory("JPAServiceExtended")in DBManager Klasse.

Burseaner
quelle
0

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 Maven

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>2.5.0</version>
</dependency>
Dhwaneel
quelle
0

Überprüfen Sie den Namen der beständigen Einheit

<persistence-unit name="com.myapp.model.jpa"
    transaction-type="RESOURCE_LOCAL">    
public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa";
Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);
Atul Jain
quelle
0

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.

<property name="javax.persistence.jdbc.url" value="...”/>
<property name="javax.persistence.jdbc.password" value="...”/>

Seltsamer Fehler, ich war deswegen total verwirrt.

Wojtek Piróg
quelle
0

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 der EclipseLink 2.5.2Verwendung eines einfachen Plug-In-Projekts.

Klendatho
quelle
0

Hatte das gleiche Problem, aber das hat tatsächlich bei mir funktioniert:

mvn install -e  -Dmaven.repo.local=$WORKSPACE/.repository.

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.

keem sisi
quelle