我试图在Junit中测试我们的一些数据库层。
我遇到的问题是Persistence.createEntityManagerFactory()采用> 200秒!谷歌搜索H2,JPA,Hibernate与createEntityManagerFactory的某些组合没有任何用处。
这是我的测试:
import static org.junit.Assert.assertTrue;
import java.util.Date;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.junit.Test;
public class MinimalSet {
@Test
public void TestNamedQuery() {
Date startTime = new Date();
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("TestPersistence");
EntityManager entityManager = entityManagerFactory.createEntityManager();
Date endTime = new Date();
// Did it take less than 10 seconds?
assertTrue(((endTime.getTime() - startTime.getTime()) / 1000.0) < 10.0);
}
}
这是我的persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="TestPersistence" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
<property name="hibernate.connection.url" value="jdbc:h2:mem:test" />
<property name="hibernate.connection.driver_class" value="org.h2.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.password" value="" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
我没有使用任何其他配置文件(例如hibernate.cfg.xml)。
我很感激为什么需要这么长时间。
感谢。
更新
它已开始快速运行(<2秒)。 所以我认为它正在等待一些事件。这有没有与网络对话?