Persistence.createEntityManagerFactory需要很长时间

时间:2011-11-01 12:17:27

标签: java sql-server hibernate jpa dbunit

我有一个运行正常的DBUnit测试,但需要花费很长时间(4-5分钟)来创建实体管理器工厂。我正在使用JPA与hibernate和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 个答案:

答案 0 :(得分:2)

最后设法将EntityManagerFactory操作时间平均从大约255秒降低到大约3秒。将hibernate-entitymanager从3.4.0.GA升级到3.6.3.Final并瞧!单元测试现在就像单元测试一样,不到6秒。为了我的知识,我会尝试寻求这种改进的答案。

答案 1 :(得分:0)

我建议你试着找出瓶颈所在:

1 - 使用终端连接到SQLServer。

2 - 修改连接以链接到不同的数据库(MySQL,PostgreSQL,H2,...)。

如果两者都运行顺利,那么问题出在您的配置中,只要我对JPA不太熟悉,我就无法再帮助您了。