3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JPAでのエラー No Persistence provider for EntityManager named XXX

Posted at

#概要
JPAで「No Persistence provider for EntityManager named XXX」が発生したときの対処方法について記載します。

#対象読者
Eclipse初心者
JPA初心者

#サマリ

  • persistence.xmlがソースフォルダのMETA-INFフォルダ存在するか確認する
  • persistence.xmlの定義内容について確認する
  • コードからユニット名を指定していることを確認する
  • 依存関係が解決しているか確認する

#persistence.xmlがソースフォルダのMETA-INFフォルダ存在するか確認する
ソースフォルダならどこでも大丈夫ですが、以下が自然かと思います。
src/main/resources/META-INF/persistence.xml
スクリーンショット 2019-06-29 6.36.59.png

ちなみに、ソースフォルダはEclipseでプロジェクト→右クリック→ビルドパス→ビルドパスの構成→ソースタブで確認できます。
スクリーンショット 2019-06-29 6.34.18.png

#persistence.xmlの定義内容について確認する
persistence.xmlに必須の定義がない場合、タイトルのエラーが発生することがあります。
以下にサンプルを記載します。

persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
	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">

	<persistence-unit name="TestJpaUnit">
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<class>org.arquillian.example.SampleEntity</class>
		<properties>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306" />
			<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
			<property name="javax.persistence.jdbc.user" value="mysql" />
			<property name="javax.persistence.jdbc.password" value="mysql" />
		</properties>
	</persistence-unit>
</persistence>

注意点のみ記載します。

  • provider定義は必須です
  • class定義はそのユニットで使用するEntityを記載します。
    JavaEEサーバでアプリを動かさない場合(バッチとか)は必須です

#コードからユニット名を指定していることを確認する
EntityManagerを取得する際は、persistence.xmlに定義したpersistence-unit nameを指定します。

SelectSampleEntity.java
public class SelectSampleEntity {

	@PersistenceContext(unitName="TestJpaUnit")
    private EntityManager em;

	public void execute(){

		List<SampleEntity> resultList = em.createQuery("SELECT e FROM SampleEntity",SampleEntity.class).getResultList();

		for(SampleEntity sampleEntity:resultList){

			System.out.println(sampleEntity.toString());

		}
	}
}

#依存関係が解決しているか確認する
上記を行っても No Persistence provider for EntityManager named XXXが出る場合、
persistence.xmlに定義したproviderの依存関係が解決していない可能性があります。
今回の場合は、以下をpom.xmlに追加し、Maven更新を行ってみてください。

<!-- https://mvnrepository.com/artifact/org.eclipse.persistence/eclipselink -->
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.0</version>
</dependency>
3
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?