2011-11-15 16 views
40

このリストの各項目がどのように正確に機能し、どのように動作し、どのような結果がもたらされ、いつ正しい時刻に使用されるのか分かりました。Hibernate:Refresh、Evict、Replicate and Flush

  1. 更新
  2. 立ち退か
  3. 複製
  4. フラッシュ

私も、それぞれがありませんが、私は絶対にわからないんだけど、私はあなたの助けを求めているのだろうか私は本当にそれを理解したいからです。

私はそれがかなり一般的な質問だと知っていますが、私はそれについてすべて知っていると本当に便利だと思います。

ありがとうございました。

答えて

41

Hibernate Documentationがこれの良い例を示す。また、これはblog postあなたにいくつかの洞察を与えるでしょう。私はそこからいくつかの行を追加します。

refresh()メソッドを使用して、オブジェクトとそのコレクションをいつでも再ロードすることができます。これは、データベース・トリガーを使用してオブジェクトの一部のプロパティーを初期化する場合に便利です。

sess.save(cat); 
sess.flush(); //force the SQL INSERT 
sess.refresh(cat); //re-read the state (after the trigger executes) 

hereを参照してください。

save(), update() or saveOrUpdate()にオブジェクトを渡すたびに、load(), get(), list(), iterate() or scroll()を使用してオブジェクトを取得するたびに、そのオブジェクトがセッションの内部キャッシュに追加されます。

flush()が後で呼び出されると、そのオブジェクトの状態はデータベースと同期されます。この同期を行わない場合や、膨大な数のオブジェクトを処理していてメモリを効率的に管理する必要がある場合は、evict()メソッドを使用してオブジェクトとそのコレクションを1次キャッシュから削除できます。

ScrollableResult cats = sess.createQuery("from Cat as cat").scroll(); //a huge result set 
while (cats.next()) { 
    Cat cat = (Cat) cats.get(0); 
    doSomethingWithACat(cat); 
    sess.evict(cat);  // (if gives the compile time error then use it: sess.evict(cat.getClass()); 
} 

完全な例をhereからお読みください。

セッションAPIについては、hereをご覧ください。

+0

私はsessionFectory.evict(cat)を呼び出そうとしていますが、コンパイル時エラー - 引数は適用されません。 –

+1

@KevalTrivediサンプルコードとログのようなすべての関連情報とともに新しい質問を投稿することを検討してください。 – ManuPK

10

replicate()は、前記エンティティの識別子が生成されるように設定されているにもかかわらず、指定された識別子でエンティティを保存する必要がある場合、save()/persist()の代わりに使用されます。

エンティティの一部(おそらくは外部システムからのもの)が既存の識別子を持っているのに対し、同じタイプの他のエンティティが識別子を生成する必要がある場合に便利です。しかし、Hibernateの長年にわたるバグ(HHH-1459HHH-2716)のため、replicate()は、いくつかの種類のIDジェネレータで期待どおりに動作しません。この問題はreplicate()の有用性を制限し、IDジェネレータ戦略が影響を受けて変更できない場合、その動作をエミュレートするために不快な回避策を実装する必要があります。

3
  • session.flush()セッションをフラッシュすると、Hibernateはセッションのインメモリ状態をデータベースと同期させます。
  • session.evict()セッションキャッシュからオブジェクトを切り離します。セッションからオブジェクトを切り離した後、オブジェクトへの変更は永続化されません。
  • session.refresh()すべてのデータを再読み込みします。
  • session.replicate()データは異なるモードで異なるDatastoreに複製されます。
関連する問題