Sono in ritardo di alcuni anni alla festa qui, ma ho raggiunto la stessa eccezione mentre cercavo di far funzionare Hibernate 3.5.1 con HSQLDB e un programma JavaFX desktop. Ho funzionato con l'aiuto di questo thread e molte prove ed errori. Sembra che tu abbia questo errore per tutta una serie di problemi:
No Persistence provider for EntityManager named mick
Ho provato a creare gli esempi di tutorial in letargo ma poiché stavo usando Java 10 non sono riuscito a farli costruire ed eseguire facilmente. Ci ho rinunciato, non volendo davvero perdere tempo a risolvere i suoi problemi. La configurazione di un file module-info.java (Jigsaw) è un'altra palla di capelli che molte persone non hanno ancora scoperto.
Un po 'confuso è che questi (sotto) erano gli unici due file di cui avevo bisogno nel mio file build.gradle. La documentazione di Hibernate non è chiara su quali barattoli è necessario includere. Il gestore delle entità stava causando confusione e non è più richiesto nell'ultima versione di Hibernate, e nemmeno javax.persistence-api. Nota, sto usando Java 10 qui, quindi ho dovuto includere jaxb-api, per aggirare alcuni errori di bind xml, oltre ad aggiungere una voce per il modulo di persistenza java nel mio file 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;
Con hibernate 5.3.1 non è necessario specificare il provider, di seguito, nel file persistence.xml. Se uno non viene fornito, il provider Hibernate viene scelto per impostazione predefinita.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Il file persistence.xml dovrebbe trovarsi nella directory corretta quindi:
src/main/resources/META-INF/persistence.xml
Il passaggio attraverso il codice sorgente di ibernazione nel debugger Intellij, dove verifica la presenza di un dialetto, ha inoltre generato la stessa identica eccezione, a causa di una proprietà dialettale mancante nel file persistence.xml. Ho aggiunto questo (aggiungi quello corretto per il tuo tipo di DB):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Ho ancora avuto la stessa eccezione dopo questo, quindi esaminando di nuovo il debugger in Intellij ha rivelato che l'entità test che stavo cercando di persistere (semplice esempio genitore-figlio) aveva delle annotazioni mancanti per le relazioni OneToMany, ManyToOne. Ho risolto questo problema e l'eccezione è scomparsa e le mie entità sono state mantenute ok.
Ecco il mio finale persistence.xml completo:
<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>
Probabilmente ho perso circa mezza giornata con questo gioiello. Il mio consiglio sarebbe di iniziare in modo molto semplice: una singola entità di test con uno o due campi, poiché sembra che questa eccezione possa avere molte cause.