我正在使用Guice作为DI Framework在JBoss 7.1.0上开发一个小型应用程序,并且正在使用maven进行构建。
我所有的DAO都将EntityManager注入为构造函数Injection:
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)
我无法弄清楚自己在做什么。你能帮我么?
提前谢谢!
最佳答案
添加具有范围hibernate-entitymanager
或provided
的test
依赖项(我需要有关项目的更多信息来确定范围)
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>...</version>
<scope>provided</scope>
</dependency>
PS。仅适用于JBoss。例如,对于WebLogic,作用域应为
compile