【问题标题】:Grails using dynamic finders with 3x+ logical argumentsGrails 使用具有 3x+ 逻辑参数的动态查找器
【发布时间】:2011-09-15 16:13:18
【问题描述】:

我成功地使用这个来自 Hibernate 的动态查找器在数据库中进行了搜索:

def temp = User.findByNameAndStreet("name", "street")

虽然,我需要这样的三重逻辑论证:

def temp = User.findByNameAndStreetAndCity("name", "street", "city")

有什么简单的方法吗?

【问题讨论】:

    标签: grails dynamic finder


    【解决方案1】:

    Grails 动态查找器不支持两个以上的谓词。这是因为不清楚是否

    User.findByNameAndAgeOrGender('foo', 12, 'm')
    

    意思是:

    (name == 'foo' && age == 12) || gender == 'm'
    

    或者这个:

    name == 'foo' && (age == 12 || gender == 'm')
    

    诚然,如果谓词总是与AndOr 结合使用。


    更新:从 Grails 1.4 开始,如果所有谓词都与 AndOr 结合使用,您可以拥有无​​限数量的谓词


    相反,您可以使用findWherefindAllWhere(取决于您是只想要第一个结果还是所有结果)。这两个都支持无限数量的谓词,我假设这些谓词与And 结合使用,例如:

    User.findAllWhere(name: "foo", age: 12, gender: 'm')
    

    【讨论】:

    • findWherefindAllWhere 或 Criteria/HQL 查询是当您需要超过 2 个时要走的路。限制 2 的原因只是为了避免荒谬的长方法名称,但这限制已在 1.4 中删除。为避免混淆分辨率顺序,您不能混合and/or - 它们必须全部为and 或全部为or,但如果您需要混合@987654338,它很简单,可以进行真正的查询@ 和 or.
    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多