Persistence.createEntityManager () мучительно медленно с Hibernate - PullRequest
3 голосов
/ 17 февраля 2011

У меня огромные проблемы с производительностью в моем приложении 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>

Ответы [ 2 ]

1 голос
/ 17 февраля 2011
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>

В зависимости от того, сколько у вас есть сущностей, создание всех таблиц, индексов и тому подобного может занять некоторое время. Я бы перешел на другую БД (или не в БД в памяти), заменил create-drop на «create», запустил ее один раз, полностью удалил свойство (чтобы он не пытался создать уже существующие таблицы) и запустите это снова. Этот последний шаг ближе к фактическому времени, потраченному Hibernate, чем к вашей текущей конфигурации.

0 голосов
/ 17 февраля 2011

Такая большая задержка также может быть признаком тайм-аута сети.Согласно этому ответу , hibernate должен проверять файл persistence.xml на соответствие встроенной копии схемы xml.Возможно, по какой-то причине он пытается получить xsd из Интернета.Можете ли вы получить дамп потока или более подробный профиль, где застряло создание менеджера сущностей?

...