当前位置: 首页 > 面试题库 >

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

燕鸿波
2023-03-14
问题内容

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

我期望我可以使用条件构建器来删除记录,但这失败了,因为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中执行,但这也感觉不对。条件构建器仅用于检索吗?

谢谢


问题答案:

从用户指南中删除对象:

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

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

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


 类似资料:
  • 我需要在Grails中使用GROUP_CONCAT聚合函数,最好来自HQL,但也可以使用标准。 我有以下疑问: } 还是没运气。我得到: -[METHOD_CALL]methodnode:'('+-[METHOD_NAME]identnode:'group_concat'{originaltext=group_concat}-[EXPR_LIST]sqlnode:'expr list'-[DOT]

  • 我使用的是Grails DetachedCriteria查询,需要在降序排序时获取最后排序的空值。这是针对Oracle数据库的。 根据我到目前为止所做的研究,Hibernate中没有对此的直接支持,因此Grails中也没有: Grails/Hibernate:如何按isnull(属性)排序以最后获得null? 和 https://hibernate.atlassian.net/browse/HHH

  • 问题内容: 我在SQL Server 2005中有一张表,其中有大约40亿行。我需要删除大约20亿行。如果我尝试在单个事务中执行此操作,则事务日志将填满,并且将失败。我没有多余的空间来增加事务日志。我认为最好的方法是批处理delete语句(约10,000个批?)。 我可能可以使用游标执行此操作,但是这样做是一种标准/简单/明智的方法吗? PS此表没有标识列作为PK。PK由整数外键和日期组成。 问题

  • 问题内容: 我正在编写一个小型Grails应用程序,并且在运行以下相当简单的代码时,我继续获得StaleObjectStateException:s约占“ createfoo”调用的1/10:th。很可能我错过了使用GORM的最佳方法。 这是代码: 我对GORM最佳做法的疑问: “ if-validate()-then-save()-else-discard()”是否是在GORM中持久保存新对象的

  • 问题内容: 这个问题已经在这里有了答案 : 从字符串中删除HTML标签 (31个答案) 4年前关闭。 是否存在可以完全删除HTML标签的正则表达式?顺便说一句,我正在使用Java。 问题答案: 您应该改用HTML解析器。我喜欢htmlCleaner,因为它为我提供了漂亮的HTML打印版本。 使用htmlCleaner,您可以执行以下操作:

  • 问题内容: 当 Person 对象包含使用 @ElementCollection 存储的数据时,我在解决如何使用JPA 批量删除 Person 对象方面遇到麻烦。任何有关如何执行此操作的想法将不胜感激。 我现在正在做的是,它因外键约束错误而失败: 引起原因:java.sql.SQLException:违反完整性约束:外键无动作;FKCEC6E942485388AB表:PERSON_EMAIL 如果