Grails/GORM에서 세 가지 조건을 사용할 때 findAllBy*가 실패하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1026455

  •  06-07-2019
  •  | 
  •  

문제

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전부 아니면 전부 ors) 그렇다면 2개 이상의 조건자를 지원하지 못할 이유가 없습니다.실제로 Grails JIRA를 검색하면 이에 대한 미해결 문제가 이미 있음을 알 수 있습니다.그것에 대해 강하게 생각한다면 투표하십시오.

그런데 IntelliJ Grails 플러그인은 조건자가 2개 이상인 동적 파인더에 대해 코드 완성 기능을 잘못 제공합니다.

솔루션/해결 방법은 단순히 기준 쿼리를 작성하거나 대신 HQL을 사용하는 것입니다.

다른 팁

아니요, 현재는 아닙니다.현재는 2가지 조건으로 제한되어 있습니다.2개 이상의 경우 기준 작성기 또는 findAllWhere 메소드를 살펴보십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top