3

我的 Eclipse RCP 应用程序存在巨大的性能问题,这显然是由 Hibernate 引起的。更具体地说,应用程序需要很长时间才能启动(最多 2 分钟) - 分析和调试表明创建 Hibernate/JPA EntityManagerFactory(在启动时发生)需要很长时间。

我已经玩了很多设置,例如使用文件数据库而不是内存,不使用 hbm2ddl,但没有成功。有没有人遇到过这样的问题?

我正在使用 JDK 1.6.20、Hibernate 3.5 和 HSQLDB 1.8(内存配置)。

下面是我的persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
    version="2.0">
    <persistence-unit name="my_db" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
            <!-- about 20 classes; skipped for brevity -->
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:my_db"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>    
</persistence>
4

2 回答 2

1
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>

根据您拥有的实体数量,创建所有表、索引等可能需要一些时间。我将更改为另一个数据库(或非内存数据库),将 create-drop 替换为“create”,运行一次,完全删除该属性(这样它就不会尝试创建已经存在的表)和再次运行它。最后一步比您当前的配置更接近 Hibernate 所花费的实际时间。

于 2011-02-17T18:22:40.703 回答
0

如此长的延迟也可能是网络超时的标志。根据这个答案,hibernate 应该针对 xml 模式的嵌入式副本验证 persistence.xml。也许是出于某种原因试图从互联网上获取 xsd。您能否获得实体管理器创建卡住的线程转储或更详细的配置文件?

于 2011-02-17T20:16:22.603 回答