【发布时间】:2011-12-19 11:00:41
【问题描述】:
我有一个运行正常的 DBUnit 测试,但需要很长时间(4-5 分钟)才能创建实体管理器工厂。我正在将 JPA 与休眠和 SQL 服务一起使用。如果有人能对此有所了解,将会有很大帮助。我的机器似乎更快将其归咎于 Sql server :) 这是我的设置代码。
@BeforeClass
public static void initEntityManager() throws Exception {
emf = Persistence.createEntityManagerFactory("primary");
em = emf.createEntityManager();
tx = em.getTransaction();
connection = new DatabaseConnection(((EntityManagerImpl) em).getSession().connection());
dataset = getDataSet();
}
这是我的 Persistence.xml
<persistence-unit name="primary" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.prototype.database.Customer</class>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<!-- Properties for Hibernate -->
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect" />
<property name="hibernate.connection.username" value="testuser" />
<property name="hibernate.connection.password" value="testuser" />
<property name="hibernate.connection.url" value="jdbc:sqlserver://localhost:1433;DatabaseName=testdb"/>
</properties>
</persistence-unit>
【问题讨论】:
-
您所说的“花费时间”到底是什么意思? 2 秒还是 3 秒? 2 或 3 分钟?因为创建 EntityManagerFactory 是一项昂贵的操作:必须扫描所有类的注释,必须构建元模型等。所以这可能是完全正常的。
-
Ahhh.. 好点.. 创建 EntityManagerFactory 需要 4-5 分钟,我认为从单元测试的角度来看这真的太多了。
-
是的,这绝对是太长了。这是值得精确的。您可以尝试通过分析器运行测试,以查看所有这些时间都花在了哪里。也许是一直在花费时间的 create-drop。为什么不一劳永逸地创建一个测试架构,而不是在每次测试运行时创建整个架构?
-
谢谢。将尝试分析器和配置建议..
标签: java sql-server hibernate jpa dbunit