2012-11-28 2 views
0

m : m 관계는 종종 아직 필요하지 않은 세 번째 클래스가 있다는 것을 의미합니다. 그래서 m 있습니다 UserProject에 m을, 그리고 제 3 도메인 클래스를 생성,Grails가 제 3의 'join'클래스를 사용하여 많은 것으로부터 많은 것

세 가지 도메인 ProjectMembership는 다음과 같다 (그림을 목적으로 최소화)입니다

사용자

class User { 

String name 

static hasMany = [projectMemberships : ProjectMembership] 
} 

프로젝트 회원

class ProjectMembership { 

static constraints = {   
} 

static belongsTo = [user:User, project:Project] 
} 

프로젝트 :

class Project { 

String name 

static hasMany = [projectMemberships : ProjectMembership] 

    static constraints = { 
    } 
} 

사용자의 ID가있는 경우 할당 된 Project 개체의 목록을 얻으려면 어떻게해야합니까?

답변

2

가지 방법의 소수가 있습니다 - 여기에 몇 가지 있습니다 :

ProjectMembership.withCriteria { 
    user { 
     eq('id', userId) 
    } 
}.collect { it.project } 

는 대량의 결과 집합을 반환합니다 그 쿼리를주의 :

def user = User.get(userId) 
ProjectMembership.findAllByUser(user).collect { it.project } 

또는 사용자에 대한 쿼리를 피하기 위해 - 프로젝트 객체의 거대한 메모리리스트로 끝날 것입니다.

+0

감사합니다. 완벽하게 작동했으며, 다른 사람들을위한 참조를 위해 솔루션에 작은 조정을 한 것만으로도, findAllByUser'는 사용자 객체를 param으로 가져갔습니다. 그러나 감사합니다. 주로 구문과 콜렉션 메소드에 대해 알지 못했기 때문에 –

+0

내 잘못했습니다. 달리는 회의는 그것에 많은 생각을 두지 않았다. 몇 가지 옵션으로 답변을 업데이트했습니다. –

관련 문제