1. 序章

このチュートリアルでは、一般的なHibernateエラー「EntityManagerの永続性プロバイダーがありません」を解決する方法を説明します。 簡単に言うと、永続化プロバイダーとは、オブジェクトをデータベースに永続化するためにアプリケーションで使用される特定のJPA実装を指します。

JPAとその実装の詳細については、 JPA、Hibernate、およびEclipseLinkの違いに関する記事を参照してください。

2. エラーの原因

アプリケーションがどの永続性プロバイダーを使用すべきかを認識していない場合、エラーが表示されます。

これは、永続性プロバイダーが persistence.xml ファイルに記載されておらず、PersistenceUnitInfo実装クラスで構成されていない場合に発生します。

3. エラーの修正

このエラーを修正するには、persistence.xmlファイルで永続性プロバイダーを定義する必要があります。

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

または、 Hibernateバージョン4.2以前を使用している場合:

<provider>org.hibernate.ejb.HibernatePersistence</provider>

アプリケーションにPersistenceUnitInfoインターフェイスを実装した場合は、 getPersistenceProviderClassName()メソッドもオーバーライドする必要があります。

@Override
public String getPersistenceProviderClassName() {
    return HibernatePersistenceProvider.class.getName();
}

必要なすべてのHibernatejarを確実に使用できるようにするには、hibernate-core依存関係をpom.xmlファイルに追加することが重要です。

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>${hibernate.version}</version>
</dependency>

4. 結論

要約すると、Hibernateエラー「EntityManagerの永続性プロバイダーがありません」の考えられる原因とそれを解決するさまざまな方法を見てきました。

いつものように、サンプルのHibernateプロジェクトはGitHub利用できます。