Hibernate のバッチデータ保存の方法
Hibernateでは、バッチ処理でデータを保存する方法が2つあります。
- セーブもしくは更新()
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
for (Object object : objects) {
session.saveOrUpdate(object);
}
transaction.commit();
session.close();
- 保存する
- フラッシュ()
Session session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
int batchSize = 50; // 设置批处理大小
int count = 0;
for (Object object : objects) {
session.save(object);
if (++count % batchSize == 0) {
session.flush();
session.clear();
}
}
transaction.commit();
session.close();
注意、2番目の方法はバッチサイズに達した時点で強制的にデータベースへ書き込み、OutOfMemoryErrorなどの発生を回避するためセッション内のキャッシュを削除する