【问题标题】:Grails search owned objects by propertiesGrails 按属性搜索拥有的对象
【发布时间】:2015-01-16 04:28:28
【问题描述】:

我正在尝试为我知道必须非常常见但找不到代码示例的查询找到正确的语法。

class ObjA {
...
static hasMany = [b:ObjB]
}

如果 a 是 ObjA 的一个实例,我想执行如下查询:

a.b.findAllBsSuchThat(b.someproperty = somevalue)

【问题讨论】:

    标签: grails


    【解决方案1】:

    为了避免每个a 对惰性关联进行 (N+1) 次查询,您可以使用如下条件:

    ObjA.withCriteria {
        b {
            eq 'someProperty', someValue
        }
    }
    

    where查询:

    ObjA.where { b.someProperty == somevalue }.list()
    

    如果您使用a.b.findAllBsSuchThat(b.someproperty = somevalue) 之类的东西,那么您将获得所有b'sa,然后过滤结果。这会影响性能并且是不必要的。

    【讨论】:

    • 如果正在测试的属性是String,语法会略有不同。这是我正在尝试执行的真正测试if (entRec.where { flags.color.equalsIgnoreCase('red').list() } != []) 我想知道entRec 是否有任何flags(标志),其property colorred
    • if ( entRec.where { flags.color == 'red' }.count() ) 应该可以。 == 运算符在 Groovy 中被覆盖,count() 如果没有匹配,则结果为 0,最终 Groovy Truth 将失败 if 条件。
    • 谢谢,但是为了确定,这不区分大小写正确吗?
    • 正确。这是区分大小写的。
    • 好的。知道了。再次感谢。
    猜你喜欢
    • 2013-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-24
    • 2023-03-21
    • 2011-03-17
    • 1970-01-01
    • 2021-05-26
    相关资源
    最近更新 更多