使用 Spring Boot + Hibernate,我正在尝试使用 nameQuery 或 nativeQuery 批量删除数据。一些元素违反了约束,Spring/Hibernate 会生成一个完整的回滚。
是否可以避免回滚?即100条记录要删除,3条有约束,所以Hibernate生成100条回滚,但我只需要回滚3条,仍然想删除97个元素。现在我创建了一个糟糕的解决方案,我使用了一个 for 循环并执行了 100 个 sql 查询。
在服务层:
@Transactional(noRollbackFor = {
SQLIntegrityConstraintViolationException.class,
PersistenceException.class,
ConstraintViolationException.class,
DataIntegrityViolationException.class })
public int deleteAll(String ids[]) {
call.dao.delete(ids)
}
在休眠层上:
delete(String ids[]) {
sql = "DELETE from mae1000 as x WHERE x.idccty in (:ids)";
int r = getCurrentSession().createNativeQuery(sql).setParameter("ids", Arrays.asList(ids)).executeUpdate();
}