一尘不染

您如何在Grails / GORM中批量删除记录?

hibernate

我有一个表,其中包含需要根据一组条件定期清除的记录。

我期望我可以使用条件构建器来删除记录,但这失败了,因为delete条件上没有方法…

def c = Agency.createCriteria()
c.delete
{
    eq("agency", "XXX")  
}

所以我想也许我先查询一下集合,然后删除那个…

def c = Agency.createCriteria()
def deletions = c
{
    eq("agency", "XXX")  
}
deletions.delete

由于相同的原因,不同的对象,这也会失败。

那么正确的方法是什么呢?我似乎不得不遍历delete()每个项目所调用的整个结果集,这是多余的(不正当的)。

我知道我可以形成一个查询来直接在HQL或SQL中执行,但这也感觉不对。条件构建器仅用于检索吗?

谢谢


阅读 690

收藏
2020-06-20

共1个答案

一尘不染

用户指南中删除对象

注意,Grails不提供deleteAll方法,因为不鼓励删除数据,通常可以通过布尔标志/逻辑来避免。

如果确实需要批量删除数据,则可以使用executeUpdate方法执行批处理DML语句:

Customer.executeUpdate("delete Customer c where c.name = :oldName", [oldName:"Fred"])
2020-06-20