3

どうやら Hibernate が原因で、Eclipse RCP アプリケーションで大きなパフォーマンスの問題が発生しています。具体的に言うと、アプリケーションの起動に非常に時間がかかります (最大 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"/>

エンティティの数によっては、すべてのテーブル、インデックスなどを作成するのに時間がかかる場合があります。別のDB(または非メモリ内DB)に変更し、create-dropを「作成」に置き換え、一度実行し、プロパティを完全に削除して(既存のテーブルを作成しようとしないように)、もう一度実行してください。この最後のステップは、現在の構成よりも Hibernate によって費やされた実際の時間に近くなります。

于 2011-02-17T18:22:40.703 に答える
0

このような長い遅延は、ネットワーク タイムアウトの兆候である可能性もあります。この回答によると、hibernate は、xml スキーマの埋め込みコピーに対して persistence.xml を検証する必要があります。何らかの理由で、インターネットから xsd を取得しようとしている可能性があります。エンティティ マネージャーの作成が停止しているスレッド ダンプまたはより詳細なプロファイルを取得できますか?

于 2011-02-17T20:16:22.603 に答える