2017-03-13 18 views
3

データベースに保存しようとしているエンティティのリストが3つあります。jpa spring boot - hibernate insert slow

合計で約1000件あります。

entityRepo.save(EntityList); 

ただし、これには完了までに4~5分かかります。 - そして、挿入の前にいくつかの選択をしていることに気付きました。私はそれが更新または挿入する必要があるかどうかを確認するために、休止状態であることを仮定しています。

とにかくこれを無効にし、休止状態の挿入の速度を向上させるには?

リスト全体を一度に保存すると、それを行う方法がわかりませんでしたか?

+2

リストと一緒にsaveを使用しないで、自分自身を繰り返します。バッチインサートをオンにし、各x(たとえば50)オブジェクトをループしてクリアし、エンティティマネージャをクリアするとき。オブジェクトが永続化されるたびに、第1レベルのキャッシュ内のエンティティをすべて休止状態にします.1つのエンティティでは目立ちませんが、1000を指定すると非常に速くなります。それを50に制限し、その間にフラッシュ/クリアしてください。 –

答えて

0

あなたは汚れチェックは、データベースから読み込ん原因になっていると言うとき、あなたは正しいです。エンティティを永続化するために標準のHibernate Sessionを使用する場合、Hibernateによって通常どおりに管理されます。

これを避けるには、StatelessSessionを開き、org.hibernate.StatelessSession.insertを使用するのが最も簡単な方法です。これは、第1レベルのキャッシュを使用しないので、エンティティをダーティチェックする必要はありません。

これはSessionFactory#withStatelessOptionsを呼び出してStatelessSessionBuilderのインスタンスを取得することで実現できます。その後、org.hibernate.StatelessSessionBuilder.openStatelessSessionに電話することができます。

関連する問題