6

ここに来てこの質問をする前に、私はかなり長い間答えを探していました。私の問題は非常に単純です。JPA Entity Manager API を使用している場合、JUnit テストを実行できません。私のテストがpersistence.xmlファイルを読み取っていないようです。

を呼び出すと、それは魅力のように機能しますが、呼び出しが次new Configuration().configure().buildSessionFactory()の場合に例外がスローされます。Persistence.createEntityManagerFactory("myapp")

javax.persistence.PersistenceException: com.myapp.Test01 の javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) の javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) に myapp という名前の EntityManager の持続性プロバイダーがありません。 setUpBeforeClass(Test01.java:22)

私の JavaSE プロジェクトの構造は次のとおりです。

myapp
++src/main/java
   ++com.myapp.model
      ++// My entity classes are here
++src/test/java
   ++com.myapp
      ++Test01.java
++src/main/resources
  ++hibernate.cfg.xml
  ++META-INF 
    ++persistence.xml

次のようになりpersistence.xmlます。

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    version="2.0">
    <persistence-unit name="myapp" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"></property> 
        </properties>
    </persistence-unit>
</persistence>

この問題を解決する方法はありますか?

ご助力ありがとうございます。

4

2 に答える 2

9

に構成を入れますsrc/test/resources/META-INF

于 2012-10-14T20:10:14.523 に答える
7

私の推測では、それorg.hibernate.ejb.HibernatePersistenceはあなたのクラスパスにはありません。それはメインの Hibernate jar ではなく、hibernate-entitymanager またはそのような jar にあります。

への呼び出しの直前のコードで、いくつかの簡単な実験を行う必要がありますPersistence.createEntityManagerFactory()

System.out.println(getClass().getResource("META-INF/persistence.xml"));

と:

System.out.println(Class.forName("org.hibernate.ejb.HibernatePersistence"));

また、Eclipse がリソースをコピーしていることを確認することも賢明です。[Project] > [Clean] を実行し、Eclipse ビルド出力ディレクトリを調べて、persistence.xml が期待どおりの場所にあるかどうかを確認します。私は、何らかの理由で Eclipse がリソースをコピーしない場合に遭遇することがあります。

于 2012-10-14T20:11:42.283 に答える