【发布时间】:2015-01-16 04:28:28
【问题描述】:
我正在尝试为我知道必须非常常见但找不到代码示例的查询找到正确的语法。
class ObjA {
...
static hasMany = [b:ObjB]
}
如果 a 是 ObjA 的一个实例,我想执行如下查询:
a.b.findAllBsSuchThat(b.someproperty = somevalue)
【问题讨论】:
标签: grails
我正在尝试为我知道必须非常常见但找不到代码示例的查询找到正确的语法。
class ObjA {
...
static hasMany = [b:ObjB]
}
如果 a 是 ObjA 的一个实例,我想执行如下查询:
a.b.findAllBsSuchThat(b.someproperty = somevalue)
【问题讨论】:
标签: grails
为了避免每个a 对惰性关联进行 (N+1) 次查询,您可以使用如下条件:
ObjA.withCriteria {
b {
eq 'someProperty', someValue
}
}
或where查询:
ObjA.where { b.someProperty == somevalue }.list()
如果您使用a.b.findAllBsSuchThat(b.someproperty = somevalue) 之类的东西,那么您将获得所有b's 和a,然后过滤结果。这会影响性能并且是不必要的。
【讨论】:
String,语法会略有不同。这是我正在尝试执行的真正测试if (entRec.where { flags.color.equalsIgnoreCase('red').list() } != []) 我想知道entRec 是否有任何flags(标志),其property color 是red。
if ( entRec.where { flags.color == 'red' }.count() ) 应该可以。 == 运算符在 Groovy 中被覆盖,count() 如果没有匹配,则结果为 0,最终 Groovy Truth 将失败 if 条件。