Sim*_*mon 23 grails hibernate grails-orm
我有一张表,其中有记录需要根据一组标准定期清除.
我原以为我可以使用条件构建器来删除记录,但由于delete条件上没有方法,因此失败了...
def c = Agency.createCriteria()
c.delete
{
eq("agency", "XXX")
}
Run Code Online (Sandbox Code Playgroud)
所以我想也许我首先查询该集合然后删除...
def c = Agency.createCriteria()
def deletions = c
{
eq("agency", "XXX")
}
deletions.delete
Run Code Online (Sandbox Code Playgroud)
这也因同样的原因,不同的对象而失败.
那么这样做的正确方法是什么?似乎过度(反常),我将不得不遍历调用delete()每个项目的整个结果集.
我知道我可以形成一个查询,直接在HQL或SQL中执行,但这也是错误的.标准构建器仅用于检索吗?
谢谢
Jes*_*rSM 50
使用Grails 2.0,您可以使用这样的分离查询:
Agency.where { }.deleteAll()
Run Code Online (Sandbox Code Playgroud)
请注意,您没有获取侦听器以及执行的内容,但它确实执行到数据库,并且它与模拟的域内容兼容,如:
void testWhatever() {
mockDomain(Agency, [])
saveABunchOfAgencies() // saves 10 of 'em
assert Agency.count() == 10
Agency.where { }.deleteAll()
assert Agency.count() == 0 // Joy!
}
Run Code Online (Sandbox Code Playgroud)
据说GORM单元测试嘲笑有一堆陷阱,但一般都非常整洁.
Col*_*ton 19
从" 用户指南"中删除对象:
请注意,Grails不提供deleteAll方法,因为不鼓励删除数据,并且通常可以通过布尔标志/逻辑来避免.
如果确实需要批量删除数据,可以使用executeUpdate方法执行批处理DML语句:
Customer.executeUpdate("delete Customer c where c.name = :oldName", [oldName:"Fred"])
Run Code Online (Sandbox Code Playgroud)
sbg*_*ius 13
如果你想避免使用HQL,我建议使用GORM list(),delete()和Groovy的扩展运算符:
def agencyList = Agency.createCriteria().list {
eq("agency", "XXX")
}
agencyList*.delete()
| 归档时间: |
|
| 查看次数: |
28484 次 |
| 最近记录: |