관련 개체가 두 개인 도메인에서 쿼리해야합니다.두 개의 연관에 대한 Grails GORM 쿼리
class UserVideo {
User user
Video video
}
class User {
String name
}
class Video {
String title
}
주어진 사용자에게 속한 UserVideos와 video.title이 문자열과 같은 모든 UserVideos를 찾아야합니다. 예를 들어 "사용자 'Fred'에 속한 모든 UserVideos를 찾고 Video.title은 '% Potter %'와 같습니다." 아무리 노력해도 아무 것도 작동하지 않습니다. 여기
def list(Integer max, String title) {
def userName = springSecurityService?.principal?.username
def user = User.findByUsername(userName)
params.max = Math.min(max ?: 10, 100)
def results
if (title) {
def c = UserVideo.createCriteria()
results = c.list {
eq("user", user)
video {
ilike("title", "%${title}%")
}
}
} else {
results = UserVideo.findAllByUser(user, params)
}
def userVideos = results.collect({ UserVideo uv ->
[uId: uv.user?.id, vId: uv.video?.id, number: uv.number, title: uv.video?.title,
format: uv.video?.format?.name, rating: uv.video?.rating?.name, genres: uv.video?.genreNames]
})
[userVideos: userVideos, total: UserVideo.count()]
}
내가 오류입니다 :
URI
/movies/userVideo/list
Class
org.h2.jdbc.JdbcSQLException
Message
Column "VIDEO_ALIA1_.TITLE" not found; SQL statement: select this_.user_id as user1_2_0_, this_.video_id as video2_2_0_, this_.number as number2_0_ from user_video this_ where this_.user_id=? and (lower(video_alia1_.title) like ?) [42122-170]
감사를 사용해보십시오. 그러나 페이징 정보도 전달해야합니다 (즉, offset = 10? max = 10). "findAllBy"호출을 할 때, 단순히 params 해시를 전달하기 만하면됩니다. 예 : UserVideo.findAllByUser (user, params). executeQuery와 비슷한 호출이 있습니까? – wholladay
예,'executeQuery'에도 페이지 매김 매개 변수를 전달할 수 있습니다. 내 편집을 참조하십시오. – dmahapatro
우수, 정말 고마워! 이제 보너스 질문을 위해 ... 페이징을하고 있기 때문에 어떻게 전체 일치 항목이 무엇인지 판단 할 수 있습니까? 예를 들어 "% to %"를 내 제목 값으로 사용하면 제목에 "to"가 포함 된 200 개의 일치 항목이 있음을 알아야합니다. 그러나 최대 10자를 넘기 때문에 10 개의 결과 만 얻습니다. 나는 두 개의 분리 된 호출을 할 수있다. (하나는 최대 값이고 다른 하나는 호출하지 않는다.)하지만 이것은 대단히 비효율적이다. – wholladay