1

Guice を DI フレームワークとして使用して JBoss 7.1.0 で小さなアプリケーションを開発しており、maven を使用してビルドしています。すべての私の DAO は、EntityManager をコンストラクタ インジェクションとして注入します。

public class MyDao{
...
@Inject
public MyDao(EntityManager em){}
...
}

これらのクラスをテストするには、テストで EntityManager を作成する必要があります。

EntityManager を作成するために、persistence.xml を src/test/resources/META-INF/persistence.xml に追加しました

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

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.foo.Foo</class>
        <exclude-unlisted-classes>true</exclude-unlisted-classes>
        <properties>
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:unit-testing-jpa" />
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect" />
            <property name="hibernate.hbm2ddl.auto" value="create-drop" />
            <property name="hibernate.connection.username" value="sa" />
            <property name="hibernate.connection.password" value="" />
        </properties>
    </persistence-unit>
</persistence>

テストのセットアップ方法では、次のことを行います。

private EntityManager em;

@Before
public void setup() {
    em = Persistence.createEntityManagerFactory("testPU")
            .createEntityManager();
}

しかし、「testPUという名前のEntityManagerの永続化プロバイダーがありません」というエラーが常に発生します。(Eclipseでテストを実行し、mavenを使用)

私は自分が間違っていることを理解できません。手伝ってくれませんか?

事前にt​​hx!

4

1 に答える 1

2

hibernate-entitymanagerスコープを使用して依存関係を追加するprovidedか、test(スコープを決定するためにプロジェクトに関する詳細情報が必要です)

  <dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-entitymanager</artifactId>
     <version>...</version>
     <scope>provided</scope>
  </dependency>  

PS。JBoss専用です。たとえば、WebLogic のスコープは次のようになります。compile

于 2012-08-31T18:45:56.713 に答える