2013-12-11 2 views
0

내가 어떤 태그 속성 수있는 간단한 수준의 노래,이 : 그럼Grails는이 매개 변수 목록이 많은 관계로 많은으로 도메인 객체를 찾을 수

class Song { 
    String title 
    static hasMany = [tags:Tag] 
} 

을, 내가 찾을 수 있도록하고 싶습니다 내가 가지고있는 경우, 예를 들어

List<Song> results = Song.findAll("where tags contains ?", [myTagList]); 

: 모든 노래는 예를 들어이의 모습, 태그의 주어진 목록을 가진

a Song S1 with tags T1 
a Song S2 with tags T1 T2 T3 
a Song S3 with tags T1 T3 
a Song S4 with tags T1 T2 T3 T4 

그리고 myTagList containing T1, T2, T3으로 쿼리를 실행하면 호출은 S2 and S4을 반환합니다.

이것을 수행하는 효율적인 방법이 있습니까? 과 기준을 사용하는 것이 가능해야

답변

0

조회 "에서의": 동적 파인더에 대한

Song.createCriteria().list{ 
    "in"("tags",myTagList) 
} 
+0

이 호출의 복잡성을 알고 계십니까? 예를 들어베이스에 수천 곡의 노래가있는 경우 전체 노래 목록을 가져온 전화를 피하고 일치를 찾기 위해 반복합니다. –

+0

느린 회신을 드려 죄송합니다. 좀 더 연구를 해보려고했지만, 이것은 그레이스 반복을 사용하지 않는 SQL in 문을 사용하여 태그가 일치하는 노래 목록을 반환해야합니다. – bschipp

+0

솔루션을 사용해 보셨습니까? 어쩌면 내가 잘못한 것을했을 수도 있지만 내 편에서 시도해 보니 분명히 작동하지 않습니다. 예상되는 것은 첫 번째 매개 변수로서 간단한 클래스 속성 (목록이 아니어야 함)과 우리가 속성을 찾고자하는 목록입니다. 필자의 경우에는 꽤 반대이다. (필자는 "tags"에 myTagList를 포함하고 싶다.) 두 매개 변수 모두에리스트가있다. Grails 문서의 예제 : 'in'("age", [18..65]) –

0

무엇입니까?

List<Song> results = Song.findAllByTagsInList(myTagList); 
+0

Song.findAllByTitleInList ([ "title1", "title2"])와 같은 간단한 인수에서 작동하지만 findAllByTagsInList를 호출하면 다음과 같이 충돌합니다. "Class : java.sql.SQLException, Message : No value for specified for 파라미터 1 " –