我的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>
最佳答案
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
根据您拥有的实体数量,可能需要一些时间来创建所有表,索引等。我将更改为另一个数据库(或非内存数据库),将create-drop替换为“ create”,运行一次,完全删除属性(这样它就不会尝试创建已经存在的表),并且再次运行。这最后一步比您当前的配置更接近Hibernate花费的实际时间。
关于performance - Persistence.createEntityManager()与Hibernate一起非常缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032890/