Brak dostawcy trwałości dla EntityManager o nazwie

148

Mam mój persistence.xmlo tej samej nazwie, używając TopLinkw META-INFkatalogu. Następnie mam kod wywołujący go za pomocą:

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

Otrzymałem jednak następujący komunikat o błędzie:

2009-07-21 09: 22: 41,018 [main] BŁĄD - Brak dostawcy trwałości dla EntityManager o nazwie agisdb
javax.persistence.PersistenceException: Brak dostawcy trwałości dla obiektu EntityManager o nazwie agisdb
    w javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89)
    w javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)

Oto 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>

Powinien być na ścieżce klas. Mam jednak powyższy błąd.

Robert A Henru
źródło

Odpowiedzi:

85

Następnie <persistence-unit name="agisdb">zdefiniuj nazwę dostawcy trwałości:

<provider>org.hibernate.ejb.HibernatePersistence</provider>
Dave Jarvis
źródło
5
Używam Derby i nie trzeba było tego określać (tak zrobiłem, ale po rozwiązaniu problemu usunąłem go, aby się upewnić). W końcu pojawił się błąd, ponieważ persistence.xml nie znajdowało się w folderze src / META-INF, mimo że znajdował się w folderze w ścieżce źródłowej Eclipse projektu. Myślę, że gdzieś jest na stałe podłączony do src / *
Fuhrmanator
6
nie było to konieczne w moim przypadku, ale przeszedł do klasy hibernacji-uprawnionego menedżera * .jar, jak stwierdzono w odpowiedzi Ualter Jr poniżej. Używam samodzielnej aplikacji GWT z hibernate-core-4.3.7.jar , hibernate-virtuymanager-4.3.7.Final.jar i hibernate-jpa-2.1-api-1.0.0.jar .
Andreas Dietrich
3
To samo z @AndreasDietrich, po zastąpieniu artefaktu „hibernate-core-4.3.10” przez „hibernate-privilymanager-4.3.10” w pom.xml (używam maven), ten błąd zniknął. Właściwie, hibernate.org/orm/downloads mówi, że w przypadku JPA powinieneś używać "hibernacji-uprawnionego-4.3.10".
Hong
1
Oprócz tego musiałem też przejść z hibernate-entitymanager-3.4.0.GA do 3.6.10.Final . Na wypadek, gdybyś nadal posiadał starszą bazę kodów korzystającą z Hibernate 3.
Javi Vazquez
5
Jestem trochę zaskoczony, że nie masz problemu ze swoim <provider/>, podczas korzystania z hibernacji-4 powinieneś zmienić dostawcę na <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>, patrz stackoverflow.com/questions/23041964/… .
Rob
86

Umieść "hibernate-entitymanager.jar"w ścieżce klasy aplikacji.
W przypadku nowszych wersji należy używać "hibernate-core.jar"zamiast przestarzałychhibernate-entitymanager

Jeśli korzystasz z jakiegoś IDE, takiego jak Eclipse :Project Properties -> Java Build Path -> Libraries.

W przeciwnym razie umieść go w /libswojej aplikacji.

Ualter Jr.
źródło
3
Zajęło mi kilka godzin, zanim zrozumiałem, że to była przyczyna. Dla innych osób szukających tego cholernego słoika, w przypadku Hibernate 4.1.3, jest on w hibernate-release-4.1.3.Final \ lib \ jpa \ hibernate-entityymanager-4.1.3.Final.jar
Vedran
7
A dla tych z nas, którzy używają Mavena, byłby to org.hibernateartefakt grupowyhibernate-entitymanager
Simon Forsberg,
2
To był dla mnie eclipselink.jar, którego brakowało na ścieżce. Żadnego hibernowania * something.jar na ścieżce.
użytkownik nieznany
3
Po prostu spędziłem kilka godzin na potwierdzaniu, że persistence.xml jest na ścieżce klasowej i porównywaniu każdego aspektu projektu, dla którego działał, z projektem, w którym nie działał. Bardzo mylący komunikat o błędzie, ponieważ może się zdarzyć, jeśli brakuje pliku persistence.xml, jeśli brakuje PU o tej nazwie lub najwyraźniej brakuje słoika hibernacji!
David Mann
Dla mnie było to org.eclipse.persistence.jpabadanie lunety.
Marek
67

Upewnij się, że persistence.xmlplik znajduje się w katalogu:<webroot>/WEB-INF/classes/META-INF

user225932
źródło
8
to nie zadziałało dla mnie, przyniósł jednostkę trwałości nie znaleziono: błąd „null”. Przenoszę go z powrotem do /src/main/resources/META-INF/persistence.xml
tomasb
1
Myślę, że dotyczy to tych, którzy używają górnego linku (lub innych rzeczy związanych z siecią), dla wszystkich innych inne odpowiedzi mogą być bardziej odpowiednie.
Simon Forsberg,
2
Dzięki, dla mnie ścieżka to target / classes / META-INF
Frizz1977
To samo, z jakiegoś dziwnego powodu musi znajdować się w katalogu META-INF, w przeciwnym razie nie zadziała ...
Thomas
17

Potrzebowałem tego w moim pliku pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version>
</dependency>
technokrata
źródło
Działa dla wersji 4.3.11.
petertc
Jest przestarzały, patrz wyżej. Zamiast tego użyj hibernate-core.
foo
16

Napotkałem ten sam problem i przez długi czas nie mogłem znaleźć rozwiązania. W moim przypadku pomogło to wymienić

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

z

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

Wziąłem rozwiązanie stąd

Sneg
źródło
2
Aktualizacja z Hibernate 4.3.5 do 5.2.12 i ta zmiana nazwy dostawcy rozwiązała problem. Wydaje się, że to ustawienie zezwala JPA na użycie podstawowego pliku .jar zamiast pliku .jar menedżera encji, który jest wyświetlany jako przestarzały w centralnym repozytorium Maven. Dziękuję bardzo za udostępnienie.
joshpt
10

Jest jeszcze jeden punkt: jeśli napotkasz ten problem w środowisku Eclipse RCP, być może będziesz musiał zmienić generację Factory z Persistence.createEntityManagerFactory nanew PersistenceProvider().createEntityManagerFactory

szczegółowe omówienie tego zagadnienia znajduje się w ECF .

col.panic
źródło
To był dokładnie ten problem, który miałem z org.eclipse.persistence.jpa 2.4.0. Dosłownie spędziłem 2 godziny na wyrywaniu włosów, zastanawiając się, dlaczego nie może znaleźć mojego persisence.xml. Wydaje się, że nie wszystkie przykłady uwzględniają to. no cóż ... wielkie dzięki!
Mark Miller,
9

Może zdefiniowałeś jednego dostawcę, <provider>org.hibernate.ejb.HibernatePersistence</provider>ale odnosiłeś się do innego w słoiku. Stało się to ze mną: moim dostawcą persystence.xml był openjpa, ale korzystałem z eclipselink w mojej ścieżce klas. Mam nadzieję, że to pomoże!

Gilberto
źródło
7

Szybka rada:

  • sprawdź, czy persistence.xml znajduje się w Twojej ścieżce klas
  • sprawdź, czy dostawca hibernacji znajduje się w Twojej ścieżce klas

W przypadku korzystania z JPA w samodzielnej aplikacji (poza JavaEE) należy gdzieś określić dostawcę trwałości. Można to zrobić na dwa znane mi sposoby:

W moim przypadku dowiedziałem się, że z powodu błędnej konfiguracji Mavena, plik jar menedżera hibernacji nie został uwzględniony jako zależność, nawet jeśli była to przejściowa zależność innego modułu.

OndroMih
źródło
/ facepalm - zapomniałem dodać zależność Mavena dla dostawcy hibernacji. Dziękuję Ci!
jgitter
5

Jeśli używasz Eclipse, upewnij się, że wzorzec wykluczenia nie usuwa twojego persistence.xmlz folderów źródłowych na ścieżce kompilacji.

  1. Przejdź do Właściwości -> Ścieżka budowania Java -> Źródło karta
  2. Sprawdź wzorzec wykluczenia, który znajduje się pod adresem
    MyProject/src/main/java -> Excluded: <your_pattern>
    węźle drzewa
  3. Opcjonalnie ustaw go na Excluded: (None), wybierając węzeł i klikając przycisk Edytuj ... po lewej stronie.
wypieprz
źródło
Rozwiązał mój problem. Wykluczony wzorzec został ustawiony na „**” po pobraniu / ściągnięciu. Nie wiem dlaczego ...
Jocelyn
5

Spóźniłem się na imprezę o kilka lat, ale trafiłem na ten sam wyjątek, próbując zmusić Hibernate 3.5.1 do pracy z HSQLDB i programem JavaFX na komputery stacjonarne. Mam to do pracy z pomocą tego wątku i wielu prób i błędów. Wygląda na to, że ten błąd pojawia się w przypadku wielu różnych problemów:

No Persistence provider for EntityManager named mick

Próbowałem zbudować przykłady samouczków hibernacji, ale ponieważ używałem Java 10, nie byłem w stanie zmusić ich do łatwego budowania i uruchamiania. Zrezygnowałem z tego, nie chcąc tracić czasu na naprawianie jego problemów. Skonfigurowanie pliku module-info.java (Jigsaw) to kolejna kula ziemska, której wielu ludzi jeszcze nie odkryło.

Nieco mylące jest to, że te (poniżej) były jedynymi dwoma plikami, których potrzebowałem w moim pliku build.gradle. W dokumentacji Hibernate nie ma jasności co do tego, które słoiki należy dołączyć. Entity-manager powodował zamieszanie i nie jest już wymagany w najnowszej wersji Hibernate, podobnie jak javax.persistence-api. Uwaga, używam tutaj Java 10, więc musiałem dołączyć jaxb-api, aby obejść niektóre błędy xml-bind, a także dodać wpis dla modułu trwałości java w moim pliku 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;

W przypadku hibernacji 5.3.1 nie musisz określać dostawcy poniżej w swoim pliku persistence.xml. Jeśli nie zostanie podany, dostawca Hibernacji jest wybierany domyślnie.

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

Plik persistence.xml powinien znajdować się w odpowiednim katalogu, więc:

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

Przejście przez kod źródłowy hibernacji w debugerze Intellij, w którym sprawdza on dialekt, również spowodowało ten sam wyjątek z powodu brakującej właściwości dialektu w pliku persistence.xml. Dodałem to (dodaj poprawny dla twojego typu DB):

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

Po tym nadal otrzymałem ten sam wyjątek, więc ponowne przejście przez debugger w Intellij ujawniło, że jednostka testowa, którą próbowałem utrwalić (prosty przykład rodzic-dziecko), miała brakujące adnotacje dla relacji OneToMany, ManyToOne. Naprawiłem to i wyjątek zniknął, a moje jednostki były w porządku.

Oto moja pełna ostateczna persystencja.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>

Prawdopodobnie zmarnowałem około pół dnia na ten klejnot. Radzę zacząć bardzo prosto - pojedyncza jednostka testowa z jednym lub dwoma polami, ponieważ wydaje się, że ten wyjątek może mieć wiele przyczyn.

MickG
źródło
Wielkie dzięki za szczegóły konfiguracji Naprawdę pomogło to rozwiązać.
Doogle
4

Przykład narożny: jeśli używasz m2Eclipse, automatycznie umieszcza wykluczenia w folderach zasobów. Następnie, gdy spróbujesz uruchomić testy wewnątrz zaćmienia, późniejszy brak trwałości.xml spowoduje ten błąd.

Obrabować
źródło
3

Upewnij się, że utworzyłeś plik persistence.xml w folderze „src”. Utworzyłem w folderze projektu i to był mój problem.

harcharan
źródło
Eclipse 4.4.0 nie chce zagnieżdżać folderów SRC, więc umieszczałem META-INF na najwyższym poziomie, myśląc, że persistence.xml znajdowanie się w ścieżce klas byłoby wystarczające. NIE! Musiałem ręcznie utworzyć src / META-INF (w systemie operacyjnym) i ręcznie przenieść plik persistence.xml. Być może da się to zrobić w Eclipse, ale nie mogłem tego rozgryźć.
Fuhrmanator
2

Dzieje się tak, gdy menedżer encji próbuje wskazać wiele jednostek trwałości. Wykonaj następujące kroki:

  1. otwórz powiązany plik w swoim edytorze (pod warunkiem, że twój projekt został zamknięty w twoim IDE)
  2. Usuń cały kod związany z trwałością i menedżerem encji
  3. Zapisz plik
  4. otwórz projekt w swoim IDE
  5. teraz powiąż bazę danych lub wybraną tabelę
mahesh
źródło
2

Napotkałem ten sam problem, ale w wersji EclipseLink 2.5.0 .

Rozwiązałem swój problem, dodając kolejny plik jar, który koniecznie był ( javax.persistence_2.1.0.v201304241213.jar.jar );

Potrzebne słoiki:
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
- jdbc.jar (w zależności od używanej bazy danych).

Mam nadzieję, że to pomoże.

DAWNY
źródło
2

Miałem również ten błąd, ale problemem był uri przestrzeni nazw w persistence.xml .

Zamieniłem http://xmlns.jcp.org/xml/ns/persistencenahttp://java.sun.com/xml/ns/persistence i wersję 2.1 na 2.0.

Teraz działa.

Ludovic Guillaume
źródło
Dokładnie tak się stało, gdy korzystałem z Tomcat .. Właśnie dodałem pełny nagłówek, aby wyjaśnić nowym użytkownikom
childno͡.de
2

Musisz dodać plik hibernacji-uprawnionego-x.jar do ścieżki klas.

W Hibernate 4.x, jeśli plik jar jest obecny, nie ma potrzeby dodawania pliku org.hibernate.ejb.HibernatePersistence w pliku persistence.xml.

vijayinani
źródło
1

Odpowiedź na to pytanie została już udzielona, ​​ale chciałem tylko opublikować wskazówkę, która mnie trzymała. Ten wyjątek został zgłoszony po poprzednich błędach. Dostałem to:

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

Mimo że zmieniłem plik persistence.xml, aby zawierał nową nazwę właściwości:

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

Po wiadomości o przestarzałej nazwie właściwości otrzymywałem ten sam PersistenceException jak powyżej i cały inny ciąg wyjątków. Moja rada: koniecznie sprawdź początek wyjątku kiełbasy.

Wygląda na to, że w Glassfish v2.1.1 występuje błąd polegający na tym, że ponowne wdrażanie lub wycofywanie i wdrażanie nie aktualizuje pliku persistence.xml, który jest gdzieś buforowany. Musiałem zrestartować serwer i wtedy zadziałało.

Rónán Ó Braonáin
źródło
1

Potrzebujesz następujących plików jar w ścieżce klas:

  1. antlr-2.7.6.jar
  2. commons-collections-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. hibernować-uprawniający.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
yeafee
źródło
1

Właśnie skopiowałem META-INF do src i działałem!

Zakaria Bouazza
źródło
1

Hibernate 5.2.5
Jar Files Wymagane w ścieżce klasy. Znajduje się w wymaganym folderze Hibernate 5.2.5 Final release. Można go pobrać ze strony http://hibernate.org/orm/downloads/

  1. antlr-2.7.7
  2. cdi-api-1.1
  3. kolega z klasy-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
  8. hibernate-core-5.2.5. Final
  9. hibernate-jpa-2.1-api-1.0.0
  10. jandex-2.0.3 Finał
  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

Utwórz plik xml „persistence.xml” w formacie

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. zanotuj informacje wymienione w tagu <persistance>, a wersja powinna być 2.1.
  2. proszę zwrócić uwagę na tag name <persistance-unit>, nazwa jest wymieniona jako „sample” . Ta nazwa musi być używana dokładnie tak samo podczas ładowania pliku

EntityManagerFactor = Persistance.createEntityManagerFactory ("sample"); . „próbkę” można zmienić zgodnie z konwencją nazewnictwa.

Teraz utwórz klasę Entity. z nazwą jak na moim przykładzie UserDetail, w pakiecie 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 + "]";
    }
}

Teraz utwórz klasę za pomocą metody main.

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

    }

}

Wyjście będzie

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
źródło
1

W moim przypadku wcześniej używam pomysłu do generowania encji według schematu bazy danych, a persistence.xmljest on generowany automatycznie w src/main/java/META-INFi zgodnie z https://stackoverflow.com/a/23890419/10701129 przenoszę go do src/main/resources/META-INF, również oznaczonego META-INF jako źródło root. Mi to pasuje.

Ale samo oznaczenie oryginalnego META-INF (czyli src / main / java / META-INF) jako źródłowego katalogu głównego nie działa, co mnie wprawia w zakłopotanie.

a to jest struktura: wprowadź opis obrazu tutaj

głupiec
źródło
0

Jeśli Persistence.createEntityManagerFactory("JPAService")w różnych klasach są różne nazwy, to pojawia się błąd. Dzięki refaktoryzacji można uzyskać różne nazwy, co było w moim przypadku. W jednej klasie auto generowane Persistence.createEntityManagerFactory("JPAService")w private void initComponents(), ContactsTable klasa różni się od Persistence.createEntityManagerFactory("JPAServiceExtended")klasy DBManager.

burseaner
źródło
0

Mój został rozwiązany przez dodanie informacji w persistence.xml, <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>a następnie upewnienie się, że masz bibliotekę na ścieżce klas, np. W Maven dodaj zależność, taką jak

<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>eclipselink</artifactId>
  <version>2.5.0</version>
</dependency>
Dhwaneel
źródło
0

Sprawdź stałą nazwę jednostki

<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
źródło
0

W moim przypadku chodziło o błąd w dwóch właściwościach jak poniżej. Kiedy je zmieniłem, zniknął „dostawca No Persistence dla EntityManager o nazwie”.

Możesz więc spróbować przetestować połączenie ze swoimi właściwościami, aby sprawdzić, czy wszystko jest w porządku.

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

Dziwny błąd, byłem przez niego całkowicie zdezorientowany.

Wojtek Piróg
źródło
0

Spróbuj również ręcznie skopiować plik persistence.xml do folderu <project root>\bin\META-INF. To rozwiązało problem w Eclipse Neon przy EclipseLink 2.5.2użyciu prostego projektu wtyczki.

Klendatho
źródło
0

Miałem ten sam problem, ale to faktycznie działało dla mnie:

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

Uwaga: powyższe polecenie maven ponownie zainstaluje wszystkie zależności projektu od zera. Twoja konsola zostanie załadowana pełnymi dziennikami z powodu wysyłania żądań sieciowych.

keem sisi
źródło