Я запізнююсь на кілька років тут, але я потрапив на той самий виняток, намагаючись змусити Hibernate 3.5.1 працювати з HSQLDB та настільною програмою JavaFX. Я змусив його працювати за допомогою цієї нитки та багато проб і помилок. Здається, ви отримуєте цю помилку з цілого ряду проблем:
No Persistence provider for EntityManager named mick
Я спробував побудувати приклади підручника зі сплячого режиму, але оскільки я використовував Java 10, я не зміг змусити їх легко створювати та працювати. Я відмовився від цього, не дуже бажаючи витрачати час на вирішення своїх проблем. Налаштування файла module-info.java (Jigsaw) - це ще одна зачіска, яку багато людей ще не виявили.
Дещо заплутаним є те, що ці (нижче) були єдиними мені потрібними двома файлами у моєму файлі build.gradle. З документа зі сплячки не зрозуміло, які саме банки потрібно включити. Entity-менеджер викликав плутанину і більше не потрібен в останній сплячій версії, а також не є javax.persistent-api. Зауважте, я тут використовую Java 10, тому мені довелося включити jaxb-api, щоб усунути деякі помилки, пов’язані з xml, а також додати запис до модуля збереження Java у мій файл 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'
Модуль-info.java
// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;
У сплячому режимі 5.3.1 вам не потрібно вказувати постачальника нижче у вашому файлі persistent.xml. Якщо такий не надається, за умовчанням вибрано постачальника режиму глибокого сну.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Файл persistent.xml повинен розташовуватися у правильному каталозі, таким чином:
src/main/resources/META-INF/persistence.xml
Перебравшись у схибний вихідний код у відладчику Intellij, де він перевіряє діалект, також викинув саме такий виняток, через відсутність властивості діалекту у файлі persistent.xml. Я додав це (додайте правильний для вашого типу БД):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Після цього я все-таки отримав той самий виняток, тому повторний перегляд налагоджувача в Intellij виявив, що у тестового об'єкта, який я намагався наполягати (простий приклад батько-дитина), були відсутні примітки для відносин OneToMany, ManyToOne. Я це зафіксував, і виняток пішов, і мої особи зберігалися нормально.
Ось моя повна остаточна стійкість.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>
Я, мабуть, витратив близько пів дня на цей дорогоцінний камінь. Моя порада буде починати дуже просто - одна тестова суть з одним або двома полями, оскільки, схоже, цей виняток може мати багато причин.