私はここのパーティーに数年遅れていますが、HSQLDBとデスクトップJavaFXプログラムでHibernate 3.5.1を動作させようとしているときに同じ例外に遭遇しました。このスレッドと多くの試行錯誤の助けを借りて動作するようになりました。さまざまな問題でこのエラーが発生するようです。
No Persistence provider for EntityManager named mick
hibernateチュートリアルのサンプルをビルドしてみましたが、Java 10を使用していたため、簡単にビルドして実行することができませんでした。私はあきらめました。問題の修正に時間を無駄にしたくないのです。module-info.javaファイル(ジグソー)の設定は、多くの人がまだ発見していないもう1つのヘアボールです。
やや混乱しているのは、これら(下記)がbuild.gradleファイルに必要な2つのファイルだけだったということです。Hibernateのドキュメントでは、どのJARを含める必要があるかが明確にされていません。Entity-managerは混乱を引き起こしていたため、最新のHibernateバージョンでは不要になり、javax.persistence-apiも不要になりました。ここではJava 10を使用しているので、jaxb-apiを含めて、xml-bindエラーを回避し、java-persistenceモジュールのエントリーを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;
hibernate 5.3.1では、persistence.xmlファイルで以下のプロバイダーを指定する必要はありません。指定しない場合、デフォルトでHibernateプロバイダーが選択されます。
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
persistence.xmlファイルは正しいディレクトリに配置する必要があります。
src/main/resources/META-INF/persistence.xml
Intellijデバッガーで方言をチェックするhibernateソースコードをステップ実行すると、persistence.xmlファイルに方言プロパティがないため、まったく同じ例外がスローされました。私はこれを追加しました(DBタイプに合ったものを追加してください):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
この後も引き続き同じ例外が発生したため、Intellijでデバッガーをもう一度ステップ実行すると、永続化しようとしているテストエンティティ(単純な親子の例)にOneToMany、ManyToOne関係のアノテーションがないことがわかりました。私はこれを修正し、例外はなくなり、エンティティは問題なく保持されました。
これが私の完全な最後の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>
私はおそらくこの宝石で約半日を無駄にしました。私のアドバイスは、非常に単純なものから始めることです。この例外には多くの原因があると思われるため、1つまたは2つのフィールドを持つ単一のテストエンティティです。