2014-06-12 8 views
2

this과 (과) 비슷한 문제가 있습니다. 하지만 에는 기능이 포함되지 않습니다.createCriteria에 대한 도메인 개체의 컬렉션 속성에 '포함하지 않음'기능이 있습니까?

나는 포스트 도메인을 가지고 있습니다. 게시물 hasMany 사용자.

def c = Post.createCriteria() 
def l = c.list (max: maxVar) { 
    notContains("users", thisUser) 
} 

내가 북동하지만 행운을 사용하여 시도 : 나는 createCriteria을 사용하여 수행하고 싶습니다 무엇 ,이 같은 것입니다.

def l = c.list (max: maxVar) { 
    users { 
     ne('id', thisUser.id) 
    } 
} 

명확하게하기 위해, 어떻게의 목록을 얻을 수있는 모든 그 사용자 필드 모음 thisUser를 포함하지 않는 것입니다 포스트?

+0

에 대한 HQL를 사용할 수 있습니까? – saw303

+0

'in'술어의 부정 형식을 사용해보세요 (예 : –

+0

grails 2.3.8을 사용하고 있습니다. – kishore

답변

2

당신이 버전은 무엇을 사용합니까 Grails는이

List<Post> posts = Post.executeQuery("select distinct p from Post p where :myUser not member of p.users", [myUser: user, max: maxVar]) 
+1

당신은 천재입니다! – kishore

0
c.list (max: maxVar) { not { 'in'("users", thisUser) }} 

이 사용자없이 목록을 반환합니다. Grails 버전 2. *에서 작동합니다. User 클래스의 .equals를 재정의해야 할 수도 있습니다.

.find를 사용하는 등 여러 가지 방법이 있습니다. 이 링크를 참조하십시오 http://groovy.codehaus.org/JN1015-Collections

+0

과 같은 결과를주었습니다. @Override를 추가했습니다. public boolean equals (Object obj) { 사용자 obdo를 && (id == obj.id) }로 반환했습니다.이 메서드는 오류를 발생했습니다. ** Message : 쿼리를 실행할 수 없습니다 ** – kishore

+0

'Post.findAll {usersInterested.find {user}}'오류가있었습니다 ** 메시지 : 0 ** – kishore

0

기존 솔루션을 얻을 수 없었지만 두 가지 별도의 쿼리를 사용하여이 문제를 해결했습니다.

우선 내가 가지고있는 모든 게시물 그의 사용자

users { eq('id', thisUser.id) }

가 그럼 난 id가 위에서 ID가 일치하지 않는 포스트의 최대 수있어 사용 thisUser
를 포함. usersList 먼저 쿼리

P.S. 결과이다

Post.findAllByIdNotInList(usersList.id, [max:15])

: 더 나은 해결책이 있다면 누구나 대답 해주십시오. 감사합니다