kno*_*orv 4 grails groovy grails-orm
请考虑以下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()}"
Run Code Online (Sandbox Code Playgroud)
这些动态查找器使用中的前五个按预期工作.
但是,第六个失败,出现InvalidPropertyException("为类[class foo]"找不到名称[yearAndMonth]的属性).
题:
为什么第六个不起作用?是不是findAllBy*能够处理两个以上的条件?解决方案/变通?
Dón*_*nal 11
泰德的答案是正确的,但原因为何 Grails的不支持超过2个谓词是因为如果所有的连词是不一样,那么它没有明确的意图是什么.
或者用简单的英语......
findAllByYearAndMonthAndDay(1999,2,3)意味着什么findAllByYearOrMonthOrDay(1999,2,3)意味着什么findAllByYearOrMonthAndDay(1999,2,3)意味着什么但是,如果所有连词都相同(全部ands或全部ors),那么就没有理由不支持超过2个谓词.事实上,如果你搜索Grails JIRA,你会发现这已经是一个未解决的问题.如果您对此感到强烈,请投票支持.
顺便提一下,IntelliJ Grails插件错误地为具有2个以上谓词的动态查找器提供代码完成.
解决方案/解决方法是简单地编写Criteria查询或使用HQL.
| 归档时间: |
|
| 查看次数: |
2279 次 |
| 最近记录: |