Saya beberapa tahun terlambat ke pesta di sini tapi saya mendapatkan pengecualian yang sama ketika mencoba untuk membuat Hibernate 3.5.1 bekerja dengan HSQLDB dan program JavaFX desktop. Saya membuatnya bekerja dengan bantuan utas ini dan banyak trial and error. Tampaknya Anda mendapatkan kesalahan ini untuk berbagai macam masalah:
No Persistence provider for EntityManager named mick
Saya mencoba membuat contoh tutorial hibernate tetapi karena saya menggunakan Java 10, saya tidak bisa membuatnya untuk dibangun dan dijalankan dengan mudah. Saya menyerah pada hal itu, tidak benar-benar ingin membuang waktu untuk memperbaiki masalahnya. Menyiapkan file module-info.java (Jigsaw) adalah hairball lain yang belum ditemukan banyak orang.
Agak membingungkan adalah bahwa ini (di bawah) adalah dua file yang saya butuhkan dalam file build.gradle saya. Dokumentasi Hibernate tidak jelas tentang guci mana yang perlu Anda sertakan. Entity-manager menyebabkan kebingungan dan tidak lagi diperlukan dalam versi Hibernate terbaru, dan begitu pula javax.persistence-api. Catatan, saya menggunakan Java 10 di sini jadi saya harus memasukkan jaxb-api, untuk mengatasi beberapa kesalahan xml-bind, serta menambahkan entri untuk modul persistensi java di file module-info.java saya.
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;
Dengan hibernate 5.3.1 Anda tidak perlu menentukan penyedia, di bawah ini, dalam file persistence.xml Anda. Jika tidak disediakan penyedia Hibernate dipilih secara default.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
File persistence.xml harus berada di direktori yang benar sehingga:
src/main/resources/META-INF/persistence.xml
Melangkah melalui kode sumber hibernate di debugger Intellij, di mana ia memeriksa dialek, juga melemparkan pengecualian yang sama persis, karena properti dialek yang hilang dalam file persistence.xml. Saya menambahkan ini (tambahkan yang benar untuk tipe DB Anda):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Saya masih mendapatkan pengecualian yang sama setelah ini, jadi melangkah melalui debugger lagi di Intellij mengungkapkan entitas tes yang saya coba bertahan (contoh orangtua-anak sederhana) telah kehilangan penjelasan untuk hubungan OneToMany, ManyToOne. Saya memperbaikinya dan pengecualian hilang dan entitas saya bertahan ok.
Inilah kegigihan akhir lengkap saya.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>
Saya mungkin menghabiskan sekitar setengah hari untuk permata ini. Saran saya adalah memulai dengan sangat sederhana - entitas uji tunggal dengan satu atau dua bidang, karena sepertinya pengecualian ini dapat memiliki banyak penyebab.