0

jpa/maven プロジェクトをテストできません。コマンドラインから「mvn cleant test」を実行すると、「javax.persistence.PersistenceException: No Persistence provider for EntityManager named xxx」というエラーが表示されます。Java SE プロジェクトがあります。

「src/test/resources/META-INF/persistence.xml」に永続化構成があります。また、「src/main/...」についても同じことが言えます。「target/classes/META-INF」でpersistence.xmlを確認できます。それはメインからのものであり、テストを実行するときのテストからのものではありません。いずれにせよどちらも機能するはずなので、これはまだ問題ではありません。初めてJPAを試してみましたが、私が見たように、ファイルは問題ないはずです(場所と内容)。

持続性ユニット名も一致する必要があります。

m2およびその他の必要なプラグインでEclipse(EE)を使用していますが、コマンドラインからmavenを実行しています。プロジェクトにエラーはありません。

// アップデート

「ターゲット/テストクラス」にテストクラスとリソースが必要であることに気付いたので、Mavenビルドを修正しようとしました。コマンドを「mvn clean test-compile test」に変更しましたリソースは正しい場所から見つけることができますが、それでも同じエラーが発生します。

// アップデート

明確にするために、ここに完全なpersistence.xmlがあります

<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="xxx"
    transaction-type="RESOURCE_LOCAL">
    <provider>my.package.EntityManagerFactoryHelper</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="yyy" />
        <property name="javax.persistence.jdbc.password" value="zzz" />
        <property name="eclipselink.ddl-generation" value="DROP_AND_CREATE" />
    </properties>
</persistence-unit>

他の投稿からヘルパーの例を取り上げました。基本的に、「xxx」永続ユニットを使用して emf を作成するだけです。これがヘルパークラスです。http://pastebin.com/1GE6uMa1

4

2 に答える 2

0

プロバイダーは次の条件を満たしている必要があります。

     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

それ以外の場合、エンティティからテーブルを作成するときにエラーが発生していなくても、テーブルの作成は失敗します。

与えられたヒントによって正しい方向に向けられたと思い、プロバイダーをチェックしなかったので、これを解決するために約2日を費やしました。

'persistence.xml'の構成で見つけることができるので、プロバイダーはeclipselinkに従う必要があります。

しかし、私はそれを明確に言うことができませんでした。それがそれほど重要だとは知らなかったし、一度はテーブルの作成にも成功した。そのときプロバイダーに何があったかはよくわかりませんが、その後失敗しました(テーブルに変更を加えた後)。おそらく、プロバイダーによる他の構成があったはずです。

于 2012-05-28T07:56:36.747 に答える
0

タグ内に < provider>org.hibernate.ejb.HibernatePersistence< /provider> を追加してみてください

于 2012-05-22T07:17:18.577 に答える