私は2つのリストを持っています。最初のリストには保存するデータが含まれ、2 番目のリストには削除するデータが含まれます。単一のトランザクションで一括挿入を保存する必要があるよりも、一括削除を実行する必要があります。以下は、これらの操作を実行するために使用したコードです。
public void bulkSaveDeleteOperation(final List<Person> personList,
final List<Person> duplicatePersonList) {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.beginTransaction();
try {
//delete operation
if (duplicatePersonList != null) {
Integer deleteCounter = 0;
for (Person cp : duplicatePersonList) {
session.delete(cp);
deleteCounter++;
if (deleteCounter % 20 == 0) {
session.flush();
session.clear();
}
}
}
//save operation
if (personList != null) {
Integer saveCounter = 0;
for (Person cp : personList) {
session.saveOrUpdate(cp);
saveCounter++;
if (saveCounter % 20 == 0) {
session.flush();
session.clear();
}
}
}
session.getTransaction().commit();
} catch (Exception e) {
}
}
ここでの問題は、保存されるリストのデータ (personList) は最終コミットでデータベースに正常に挿入されますが、削除されるリストのデータ (duplicatePersonList) は削除されません。削除操作と挿入操作の両方が、データベース内の同じテーブルにヒットします。だから、ここで何が間違っているのか、私にはわかりませんでした。