Mam mój persistence.xml
o tej samej nazwie, używając TopLink
w META-INF
katalogu. 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.
java
jpa
persistence
toplink
Robert A Henru
źródło
źródło
<provider/>
, podczas korzystania z hibernacji-4 powinieneś zmienić dostawcę na<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
, patrz stackoverflow.com/questions/23041964/… .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
/lib
swojej aplikacji.źródło
org.hibernate
artefakt grupowyhibernate-entitymanager
org.eclipse.persistence.jpa
badanie lunety.Upewnij się, że
persistence.xml
plik znajduje się w katalogu:<webroot>/WEB-INF/classes/META-INF
źródło
Potrzebowałem tego w moim pliku pom.xml:
źródło
Napotkałem ten sam problem i przez długi czas nie mogłem znaleźć rozwiązania. W moim przypadku pomogło to wymienić
z
Wziąłem rozwiązanie stąd
źródło
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 .
źródło
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!źródło
Szybka rada:
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:
<provider>org.hibernate.ejb.HibernatePersistence</provider>
(zgodnie z opisem w prawidłowej odpowiedzi Chris: https://stackoverflow.com/a/1285436/784594 )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.
źródło
Jeśli używasz Eclipse, upewnij się, że wzorzec wykluczenia nie usuwa twojego
persistence.xml
z folderów źródłowych na ścieżce kompilacji.MyProject/src/main/java -> Excluded: <your_pattern>
węźle drzewa
Excluded: (None)
, wybierając węzeł i klikając przycisk Edytuj ... po lewej stronie.źródło
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:
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
Module-info.java
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.
Plik persistence.xml powinien znajdować się w odpowiednim katalogu, więc:
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):
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:
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.
źródło
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.
źródło
Upewnij się, że utworzyłeś plik persistence.xml w folderze „src”. Utworzyłem w folderze projektu i to był mój problem.
źródło
Jeśli używasz Mavena, może to oznaczać, że nie szuka odpowiedniego miejsca dla folderu META-INF. Inni wspominali o kopiowaniu folderu, ale innym sposobem, który zadziałał, było wskazanie Mavenowi, gdzie go szukać, za pomocą
<resources>
tagu. Zobacz: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.htmlźródło
Dzieje się tak, gdy menedżer encji próbuje wskazać wiele jednostek trwałości. Wykonaj następujące kroki:
źródło
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.
źródło
Miałem również ten błąd, ale problemem był uri przestrzeni nazw w
persistence.xml
.Zamieniłem
http://xmlns.jcp.org/xml/ns/persistence
nahttp://java.sun.com/xml/ns/persistence
i wersję 2.1 na 2.0.Teraz działa.
źródło
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.
źródło
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:
Mimo że zmieniłem plik persistence.xml, aby zawierał nową nazwę właściwości:
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ódło
W kontekście OSGi konieczne jest umieszczenie jednostek trwałości w pliku MANIFEST.MF, np.
W przeciwnym razie pakiet JPA nie będzie wiedział, że pakiet zawiera jednostki trwałości.
Zobacz http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .
źródło
Potrzebujesz następujących plików jar w ścieżce klas:
źródło
Właśnie skopiowałem META-INF do src i działałem!
źródło
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/
Utwórz plik xml „persistence.xml” w formacie
YourProject / src / META-INF / persistence.xml
persistence.xml
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
Teraz utwórz klasę za pomocą metody main.
HibernateTest.java
Wyjście będzie
źródło
W moim przypadku wcześniej używam pomysłu do generowania encji według schematu bazy danych, a
persistence.xml
jest on generowany automatycznie wsrc/main/java/META-INF
i zgodnie z https://stackoverflow.com/a/23890419/10701129 przenoszę go dosrc/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:
źródło
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 generowanePersistence.createEntityManagerFactory("JPAService")
wprivate void initComponents()
, ContactsTable klasa różni się odPersistence.createEntityManagerFactory("JPAServiceExtended")
klasy DBManager.źródło
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źródło
Sprawdź stałą nazwę jednostki
źródło
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.
Dziwny błąd, byłem przez niego całkowicie zdezorientowany.
źródło
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 przyEclipseLink 2.5.2
użyciu prostego projektu wtyczki.źródło
Miałem ten sam problem, ale to faktycznie działało dla mnie:
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.
źródło