我试图在Grails HQL中做这样的事情,但它不起作用
我想从可能包含10个元素的ID列表中删除最多5个元素。我按日期订购,只删除最旧的5
Entity.executeUpdate(
"DELETE FROM Entity WHERE id in (:list) ORDER BY date LIMIT 5",
[list: oldestIdsForRemoval])
Pure SQL工作得很好
DELETE FROM entity WHERE id in ('8f027db299354a869af51e1f0a60ede1', '96df61161c32491f8aa4a14c5017852c', '88aa7b2bb6e1444f8d892fff10b8adcd') ORDER BY date ASC LIMIT 1
这甚至可能吗?
我还尝试将max:5
参数添加到参数列表中,但它失败了。
我使用的是Grails 1.3.6。如果它是在较新版本中修复的,那将很高兴知道,虽然我不能使用它。 文档在这方面没有多大帮助:http://grails.github.io/grails-doc/1.3.7/ref/Domain%20Classes/executeUpdate.html
答案 0 :(得分:1)
使用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
。在这种情况下,您有几个选择:
SELECT
和一个最大值,用于选择ID,然后DELETE
用于这些特定ID。