休止状態を使用して多数のオブジェクトをデータベースに保存する必要があります。それらすべてを一度にコミットする代わりに、n (BATCH_SIZE) 個のオブジェクトがセッションに存在するとすぐにコミットしたいと考えています。
Session session = getSession();
session.setCacheMode(CacheMode.IGNORE);
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.flush();
session.clear();
}
}
上記のようなことを試してみsession.flush()
ましたが、データベースへの変更をコミットしていないことを読みました。これは、次のコードが正しい方法ですか?
Session session = getSession();
session.setFlushMode(FlushMode.COMMIT);
session.setCacheMode(CacheMode.IGNORE);
session.beginTransaction();
for(int i=0;i<objects.length;i++){
session.save(objects[i]);
if( (i+1) % BATCH_SIZE == 0){
session.getTransaction().commit();
session.clear();
//should I begin a new transaction for next batch of objects?
session.beginTransaction();
}
}
session.getTransaction().commit();