3

hibernateTemplate の flush() メソッドと clear() メソッドの違いは何ですか? いつどれを使う?

次のコードがあります

    public void saveAllReportRoomRes(List<ReportRoomRes> reportRoomResList) throws  DataAccessException {
    hibernateTemplate.saveOrUpdateAll(reportRoomResList);
    hibernateTemplate.flush();
    }

毎回レコードのリストを渡すループでこのメソッドを呼び出します(合計レコードは2ラックを超える場合があります)。私のコードはトランザクションの下にあるため、その後の反復で、休止状態が同じ主キー (複合主キーがある) オブジェクトを見つけた場合、NonUniqueObject Exception がスローされます。しかし実際には、以前に挿入されたレコードを更新する必要があります。

HibernateTemplate.clear() を使用すると、機能しています。

また、大量のレコードを保存または更新するのに適した方法ですか? これは、あるDBから別のDBに一定の間隔でデータをコピーする私の通常のケースです。

4

1 に答える 1

2

Hibernate Session.clear() :

ボイド org.hibernate.Session.clear()

セッション キャッシュからすべてのオブジェクトを削除し、保留中の保存、更新、および削除をすべてキャンセルします。

Session.flush として保留中のすべての保存、更新、および削除をデータベースにフラッシュします。

http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html

適切なものを選択することは、選択したトランザクションの種類によって異なります。

もう1つの質問に答える

大量のレコードを更新するには Batch を使用します。

于 2014-04-07T15:16:32.327 に答える