Grails execute使用限制更新不起作用删除



我正在尝试在Grails HQL中做这样的事情,但它不起作用

我想从可能包含 5 个元素的 ID 列表中删除最多 10 个元素。我按日期排序,只删除最早的 5 个

Entity.executeUpdate(
        "DELETE FROM Entity WHERE id in (:list) ORDER BY date LIMIT 5",
        [list: oldestIdsForRemoval])

纯SQL工作得很好

DELETE FROM entity WHERE id in ('8f027db299354a869af51e1f0a60ede1', '96df61161c32491f8aa4a14c5017852c', '88aa7b2bb6e1444f8d892fff10b8adcd') ORDER BY date ASC LIMIT 1

这可能吗?我也尝试将max:5参数添加到参数列表中,但失败了。

我正在使用圣杯 1.3.6 .如果在较新版本中修复了它,很高兴知道,尽管我不能使用它。文档在这方面没有多大帮助:http://grails.github.io/grails-doc/1.3.7/ref/Domain%20Classes/executeUpdate.html

使用

HQL 时,请考虑使用 Hibernate 的用户指南。它包含关于HQL的部分,该部分很好地涵盖了该语言。这是根目录:https://docs.jboss.org/hibernate/orm/

另一个来源,虽然更神秘,是用于解析HQL代码的解析器的ANTLR源:https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/antlr/hql.g

正如

我所做的那样,您可以从 ANTLR 代码中得出结论,即 HQL 不支持LIMIT .在这种情况下,您有以下几种选择:

  1. 使用两个查询。一个SELECT ,以及一个最大值,用于选择 ID,然后是这些特定 ID 的DELETE
  2. 请改用本机查询 (ex.SQL) 来授予对基础数据库的完全访问权限。

最新更新