【问题标题】:Why does findAllBy* fail when using three conditions in Grails/GORM?为什么在 Grails/GORM 中使用三个条件时 findAllBy* 会失败?
【发布时间】:2009-06-22 10:28:39
【问题描述】:

考虑 Grails/GORM 动态查找方法 findAllBy* 的以下用法:

def foo1 = Foo.findAllByYear(yyyy)
def foo2 = Foo.findAllByMonth(mm)
def foo3 = Foo.findAllByDay(dd)
def foo4 = Foo.findAllByYearAndMonth(yyyy, mm)
def foo5 = Foo.findAllByYearAndDay(yyyy, dd)
def foo6 = Foo.findAllByYearAndMonthAndDay(yyyy, mm, dd)

println "# foo1=${foo1.size()} foo2=${foo2.size()} foo3=${foo3.size()}"
println "# foo4=${foo4.size()} foo5=${foo5.size()} foo6=${foo6.size()}"

这些动态查找器的前五个用法按预期工作。

但是,第六个失败并出现 InvalidPropertyException(“找不到类 [class foo] 的名称 [yearAndMonth] 的属性”)。

问题:

为什么第六个不起作用? findAllBy* 不能处理两个以上的条件吗?解决方案/解决方法?

【问题讨论】:

    标签: grails groovy grails-orm


    【解决方案1】:

    Ted 的回答是正确的,但是为什么 Grails 不支持超过 2 个谓词的原因是因为如果所有的连词都不相同,那么它的意图是什么就不清楚了。

    或者用简单的英语...

    • findAllByYearAndMonthAndDay(1999,2,3) 的含义很明显
    • findAllByYearOrMonthOrDay(1999,2,3) 的含义也很明显
    • findAllByYearOrMonthAndDay(1999,2,3) 的含义并不明显

    但是,如果所有的连词相同(所有ands 或所有ors),那么没有理由不支持超过2 个谓词。事实上,如果你搜索 Grails JIRA,你会发现已经有一个未解决的问题。如果您对此有强烈的感觉,请投票给它。

    顺便说一句,IntelliJ Grails 插件错误地为具有超过 2 个谓词的动态查找器提供代码完成。

    解决方案/解决方法是简单地编写一个 Criteria 查询或改用 HQL。

    【讨论】:

      【解决方案2】:

      不,目前没有。目前仅限于2个条件。对于超过 2 个,请查看标准构建器或 findAllWhere 方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-29
        • 2019-03-13
        • 2019-03-31
        • 2020-02-20
        相关资源
        最近更新 更多