Sessionを使用しているsaveOrUpdate(Object)
間はHibernateで機能しますが、保存と更新のどちらを実行するかを確認する必要がないため、より簡単です。しかし、insert(Object)
andupdate(Object)
関数はステートレスセッションにのみ存在し、何十万ものレコードを処理し、休止状態がメモリを使い果たしているため、ステートレスセッションを使用する必要があります。saveOrUpdate(Object)
ステートレスセッションで機能を複製する方法はありますか?またはとにかく、オブジェクトを使用して休止状態を介して実行する代わりに、Hqlクエリを使用します。
質問する
1475 次
1 に答える
0
StatelessSession JavaDoc によると
ステートレス セッションは、第 1 レベルのキャッシュを実装せず、第 2 レベルのキャッシュと対話せず、トランザクションのライトビハインドまたは自動ダーティ チェックを実装せず、関連付けられたインスタンスに操作をカスケードしません。ステートレス セッションでは、コレクションは無視されます。ステートレス セッションを介して実行される操作は、Hibernate のイベント モデルとインターセプターをバイパスします。ステートレス セッションは、一次キャッシュがないため、データ エイリアシングの影響を受けやすい
第 1 レベルのキャッシュを維持しないため、オブジェクトの現在の状態 (一時的、永続的、分離済み、または削除済み) がわからないため、意識的な決定を下すことができません。HQL を使用してクエリを実行し、データベースに同じレコードが存在するかどうかを確認し、それぞれのメソッドをinsert()
またはに呼び出すことができますupdate()
。しかし、これはコストがかかります。
更新または挿入するレコードが何十万もある場合は、休止状態にするのではなく、基本的な JDBC を使用するのが最善です。それはあなたの記憶の問題を解決します。
于 2013-03-07T09:49:24.030 に答える