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.