gpt4 book ai didi

grails - 为什么在 Grails/GORM 中使用三个条件时 findAllBy* 会失败?

转载 作者:行者123 更新时间:2023-12-02 05:59:11 25 4
gpt4 key购买 nike

考虑 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* 不是能够处理两个以上的条件吗?解决方案/解决方法?

最佳答案

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

或者用简单的英语...

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

但是,如果所有连词相同(所有and或所有or),那么没有理由超过无法支持 2 个谓词。事实上,如果您搜索 Grails JIRA,您会发现已经存在一个悬而未决的问题。如果您对此有强烈的感觉,请投票。

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

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

关于grails - 为什么在 Grails/GORM 中使用三个条件时 findAllBy* 会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1026455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com