在gorm域类中,我可以做到
def q = {
property1{
eq('attr', 0)
}
}
MyDomainClass.list(q)
如何在运行时修改闭包'q'(或创建一个包含闭包'q'限制的新闭包),例如我可以添加另一个属性限制?
更多详情
实际上我的问题是如何在域类层次结构中创建组合标准。
class Parent{
int pAttr
static def getCriteria(){
def dummyParentCriteria = {
eq('pAttr', 0)
}
}
}
class Child extends Parent{
int cAttr
static def getCriteria(){
def dummyChildCriteria = {
// (1)
eq('cAttr', 0)
}
}
}
在'dummyChildCriteria'中我想避免重复父母的限制。
我想以某种方式将Parent的getCriteria的结果与(1)
结合起来具有命名查询继承的解决方案
class Parent{
int pAttr
static namedQueries = {
parentCriteria{
eq('pAttr', 0)
}
}
}
class Child extends Parent {
int cAttr
static namedQueries = {
childCriteria{
parentCriteria()
eq('cAttr', 0)
}
}
}
但如果有人知道最初问题的答案,那就很高兴知道了!
答案 0 :(得分:2)
自Grails 2.0.x以来,您可以使用具有许多用途的 Detached Criteria queries ,包括允许您创建公共可重用标准查询,执行子查询以及执行批量更新/删除。
使用分离条件,您可以使用 Where Queries 进行查询合成。
def parentCriteria = {
pAttr == 0
}
def childCriteria = {
cAttr == 0
}
def parentQuery = Parent.where(parentCriteria)
def childQuery = Child.where(parentCriteria && childCriteria)