Grails/GORM에서 세 가지 조건을 사용할 때 findAllBy*가 실패하는 이유는 무엇입니까?
문제
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()}"
이러한 동적 Finder 사용법 중 처음 5개는 예상대로 작동합니다.
그러나 여섯 번째 항목은 InvalidPropertyException("클래스 [class foo]의 이름 [yearAndMonth]에 대한 속성을 찾을 수 없습니다.")으로 인해 실패합니다.
질문:
여섯 번째는 왜 작동하지 않습니까?findAllBy*는 두 개 이상의 조건을 처리할 수 없나요?솔루션/해결 방법?
해결책
Ted의 답변은 정확하지만 그 이유는 다음과 같습니다. 왜 Grails는 2개 이상의 술어를 지원하지 않습니다. 왜냐하면 모든 접속사가 동일하지 않으면 의도가 무엇인지 명확하지 않기 때문입니다.
아니면 일반 영어로...
- 뻔한데 뭐
findAllByYearAndMonthAndDay(1999,2,3)
수단 - 또한 무엇인지는 분명하다.
findAllByYearOrMonthOrDay(1999,2,3)
수단 - 하지만 무엇인지는 확실하지 않습니다
findAllByYearOrMonthAndDay(1999,2,3)
수단
그러나 만약 모든 접속사가 ~이다 똑같다(모두 and
전부 아니면 전부 or
s) 그렇다면 2개 이상의 조건자를 지원하지 못할 이유가 없습니다.실제로 Grails JIRA를 검색하면 이에 대한 미해결 문제가 이미 있음을 알 수 있습니다.그것에 대해 강하게 생각한다면 투표하십시오.
그런데 IntelliJ Grails 플러그인은 조건자가 2개 이상인 동적 파인더에 대해 코드 완성 기능을 잘못 제공합니다.
솔루션/해결 방법은 단순히 기준 쿼리를 작성하거나 대신 HQL을 사용하는 것입니다.
다른 팁
아니요, 현재는 아닙니다.현재는 2가지 조건으로 제한되어 있습니다.2개 이상의 경우 기준 작성기 또는 findAllWhere 메소드를 살펴보십시오.