【问题标题】:Persistence.createEntityManagerFactory takes agesPersistence.createEntityManagerFactory 需要很长时间
【发布时间】: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


【解决方案1】:

我建议您尝试通过以下方式找到瓶颈所在:

1-使用终端连接到SQLServer。

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

如果两者都运行顺利,那么问题出在你的配置上,我无法为你提供更多帮助,只要我对 JPA 不太熟悉。

【讨论】:

    【解决方案2】:

    最终设法将 EntityManagerFactory 的平均操作时间从大约 255 秒减少到大约 3 秒。将休眠实体管理器从 3.4.0.GA 升级到 3.6.3.Final,瞧!单元测试现在像单元测试一样运行,不到 6 秒。据我所知,将尝试为这种改进寻求答案。

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 2013-09-07
      • 2020-08-26
      • 2014-10-09
      • 2012-11-26
      • 2019-12-27
      • 2017-10-22
      • 2020-11-15
      • 2016-05-19
      相关资源
      最近更新 更多