2016-09-14 82 views
0

可以說我有兩個類User和Role以及一個組合類UserRole。如何在多對多關係中找到具有單一角色的用戶?

這是一個多對多的關係。隨着groovy我想統計只有USER_ROLE角色的用戶總數。我怎麼能這樣做?

class User{ 

    String name 

} 

class Role{ 

    String authority 

} 

class UserRole{ 

    User user 
    Role role 

} 

我只把相關信息。

我想形成GORM查詢如

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

,這樣我可以用唯一的作用USER_ROLE得到用戶的數量。我感謝任何幫助!謝謝!

+0

def users = UserRole.findAll {role =='USER_ROLE'}。size()是計數 – Vahid

+0

,但是這也會爲用戶提供包括USER_ROLE在內的其他角色。 – kofhearts

+0

您可能需要運行兩個單獨的命令來查找有和沒有用戶,然後比較並解析出您想要/不想要的內容。祝你好運 – Vahid

回答

1

無將hasMany添加到您的角色和用戶域(您可以將用戶添加到UserRole,但不應將角色添加到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)]) 

但是這些Select通常在數據庫上表現不佳。對於維護功能或者它不會經常執行而言沒關係。

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查詢:

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

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

但這種方法也只列出了所有具有用戶角色的用戶。不是那些只有用戶角色的人 – norganos

相關問題