我有一个GORM域对象,它通过两个不同的列与另一个对象建立关联。我试图通过几个嵌套连接获取一些数据。我没有连接两次并且返回的行数呈指数增长,而是决定将查询分成两部分。
有没有办法动态指出要查询的列?换句话说,是否可以采用这段代码......
Set<Template> templates = new HashSet<Template>()
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
buyer {
companyUsers {
eq 'userId',userId
}
}
})
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
seller {
companyUsers {
eq 'userId',userId
}
}
})
并将其缩短为类似
Set<Template> templates = new HashSet<Template>()
['buyer','seller'].each{ who ->
templates.addAll(Template.createCriteria().list {
eq 'isActive',true
eq 'allowCustomerRequest',true
who {
companyUsers {
eq 'userId',userId
}
}
})
}
修改 如@dmahapatro所示,可以在单个查询中执行此操作,但我认为这样做的方式会增加行数相当多。这是一个做多个连接的例子......
Set<Template> templates = new HashSet<Template>()
templates.addAll(Template.createCriteria().listDistinct {
eq 'isActive',true
eq 'allowCustomerRequest',true
or{
buyer {
companyUsers {
eq 'userId',userId
}
}
seller {
companyUsers {
eq 'userId',userId
}
}
}
})