1

Sessionを使用しているsaveOrUpdate(Object)間はHibernateで機能しますが、保存と更新のどちらを実行するかを確認する必要がないため、より簡単です。しかし、insert(Object)andupdate(Object)関数はステートレスセッションにのみ存在し、何十万ものレコードを処理し、休止状態がメモリを使い果たしているため、ステートレスセッションを使用する必要があります。saveOrUpdate(Object)ステートレスセッションで機能を複製する方法はありますか?またはとにかく、オブジェクトを使用して休止状態を介して実行する代わりに、Hqlクエリを使用します。

4

1 に答える 1

0

StatelessSession JavaDoc によると

ステートレス セッションは、第 1 レベルのキャッシュを実装せず、第 2 レベルのキャッシュと対話せず、トランザクションのライトビハインドまたは自動ダーティ チェックを実装せず、関連付けられたインスタンスに操作をカスケードしません。ステートレス セッションでは、コレクションは無視されます。ステートレス セッションを介して実行される操作は、Hibernate のイベント モデルとインターセプターをバイパスします。ステートレス セッションは、一次キャッシュがないため、データ エイリアシングの影響を受けやすい

第 1 レベルのキャッシュを維持しないため、オブジェクトの現在の状態 (一時的、永続的、分離済み、または削除済み) がわからないため、意識的な決定を下すことができません。HQL を使用してクエリを実行し、データベースに同じレコードが存在するかどうかを確認し、それぞれのメソッドをinsert()またはに呼び出すことができますupdate()。しかし、これはコストがかかります。

更新または挿入するレコードが何十万もある場合は、休止状態にするのではなく、基本的な JDBC を使用するのが最善です。それはあなたの記憶の問題を解決します。

于 2013-03-07T09:49:24.030 に答える