我正在批量更新大量对象并希望忽略任何重复项。
这样做的最佳方法是什么?
我的理解是,如果 ConstrainViolationException
批次中的所有其他对象将被抛出 不是 被坚持。
最佳答案
这是我的解决方案:
private void saveBatch() {
StatelessSession session = sessionFactory.openStatelessSession();
Transaction tx = session.beginTransaction();
try {
for (Object t : batchList) {
session.insert(t);
}
tx.commit();
} catch (ConstraintViolationException e) {
log.info("Duplicate in batch...save individually");
tx.rollback();
session.close();
saveIndividually();
return;
}
session.close();
batchList.clear();
}
private void saveIndividually() {
StatelessSession session = sessionFactory.openStatelessSession();
for (Object t : batchList) {
Transaction tx = session.beginTransaction();
session.insert(t);
try {
tx.commit();
} catch (ConstraintViolationException e) {
tx.rollback();
log.warn("Ignoring duplicate: " + t);
}
}
session.close();
batchList.clear();
}
关于具有约束违反异常的 hibernate 批量更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8138559/