2016-12-10 11 views
0

この観察された効果がHibernateのセッションキャッシュに起因するのかどうかはわかりませんが、それは私のように見えます。私は現在、SSDに格納されているH2(v1.4.x/MVCC)データベースバックエンドに対してテストユニットを実行しています。私は10k +の行を挿入しているし、 '純粋な' JPAのパフォーマンスは非常に悪いですし、1つのCPUが最高速度で実行し、毎秒200-300の速度で '普通の'行を挿入しています。ここで興味深いのは、それぞれのinsert文( 'em.persist(...)')を別のトランザクションにラップし、コミット直後にエンティティマネージャから永続オブジェクトを「切り離す」と、速度が10倍になるということです。何とかHibernateは永続オブジェクトをダンプすることを忘れてしまい、検出可能な制限なしにオブジェクトを蓄積しているようです。デフォルトのHibernate(5.2.5)セッションレベルキャッシュの強制終了のパフォーマンスですか?

なぜデフォルトのパフォーマンスがおかしなのですか?それについて本当に誰も気にしないのですか、ここで何が間違っていますか?

何らかの理由で、Hibernateは、JDBC接続が最初に自動コミットモードになっていないと不満を持ちます。これは関連していますか?

答えて

4

Hibernateが投棄を忘れているようだいいえ、それは何かを忘れていないオブジェクト

を持続しました。管理対象オブジェクトを永続化した後に変更し、これらの変更をデータベースに保存できるようにする必要があります。分離されたオブジェクトが返された場合、JPAはまったく役に立たないでしょう。

大量の要素を挿入する必要がある場合は、必要に応じて明示的にデタッチする必要があります(これは、Hibernate/JPAが設計されたユースケースではありません)。

+0

えええええええええええええええええええええと、使用事例です。 ty。 – user1050755

関連する問題