2016-09-14 2 views
0

두 개의 클래스 User 및 Role과 복합 클래스 UserRole이 있다고 가정 해 보겠습니다.많은 관계에서 단일 역할을 가진 사용자를 찾는 방법은 무엇입니까?

이것은 많은 관계입니다. 그루비와 나는 유일한 역할 USER_ROLE을 가지고 총 사용자를 계산 싶어요. 내가 어떻게 할 수 있니?

class User{ 

    String name 

} 

class Role{ 

    String authority 

} 

class UserRole{ 

    User user 
    Role role 

} 

관련 정보 만 넣었습니다.

나는 내가 유일한 역할 USER_ROLE와 사용자의 수를 얻을 수 있도록 GORM 쿼리와 같은

def result = UserRole.createCriteria().list(){ 
    eq('role', Role.get(1)) //the Role with id 1 is USER_ROLE  
} 

을 형성합니다. 어떤 도움을 주셔서 감사합니다! 감사! 없이

def result = UserRole.createCriteria().list(){ 

    eq('role', Role.get(1)) //the Role with id 1 is USER_ROLE  
} 
+0

def users = UserRole.findAll {role == 'USER_ROLE'}. 크기 ( – Vahid

+0

)이지만 USER_ROLE을 포함한 다른 역할을 사용자에게 부여합니다. – kofhearts

+0

두 가지 별도의 명령을 실행하여 사용자를 찾거나하지 않고 사용자를 찾고 원하는 것을 비교하고 구문 분석해야 할 수 있습니다. 행운을 빌어 요. – Vahid

답변

0

class User{ 

    String name 
    static hasMany = [userRoles:UserRole] 
} 

class Role{ 

    String authority 
    static hasMany = [userRoles:UserRole] 
} 

class UserRole{ 

    static belongsTo = [user:User, role:Role] 
} 

지금 UserRole에 쿼리를 발생합니다 (복합 클래스 인)도 조인 테이블을 모델링이 한 많은 관계로 많은 많은 휴식

사용자의 역할과 사용자 도메인에 hasMany를 추가합니다 (사용자의 UserRole에 hasMany를 추가 할 수 있지만 역할에서 UserRole을 추가하면 안됩니다). 이 HQL 쿼리는 원하는 것을 수행해야합니다.

User.executeQuery("\ 
     SELECT u \ 
     FROM User AS u \ 
     WHERE EXISTS (\ 
       SELECT 1 \ 
       FROM UserRole AS ur_a \ 
       WHERE ur_a.user = u \ 
        AND ur_a.role = :searchRole \ 
      ) \ 
      AND NOT EXISTS (\ 
       SELECT 1 \ 
       FROM UserRole AS ur_b \ 
       WHERE ur_b.user = u \ 
        AND ur_b.role != :searchRole \ 
      ) \ 
    ", [searchRole: Role.get(1)]) 

그러나 이러한 종류의 선택은 일반적으로 데이터베이스에서 제대로 수행되지 않습니다. 유지 보수 기능이나 자주 실행되지 않는 경우에는 정상입니다.

+0

그러나이 접근법은 사용자 역할이있는 모든 사용자 만 나열합니다. 사용자 역할 만 갖는 것은 아닙니다. – norganos

관련 문제