首页 > 解决方案 > 如何在 Spring Hibernate 中批量删除?

问题描述

使用 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();
}       

标签: hibernatespring-bootsql-deletebulkhibernate-native-query

解决方案


推荐阅读