2016-09-14 8 views
0

私は2つのクラスのUserとRoleと複合クラスUserRoleを持っているとしましょう。多対多の関係で単一の役割を持つユーザーを見つける方法

これは多対多の関係です。 Groovyでは、唯一の役割USER_ROLEを持つ合計ユーザー数をカウントしたいと思います。どうすればいいですか?

class User{ 

    String name 

} 

class Role{ 

    String authority 

} 

class UserRole{ 

    User user 
    Role role 

} 

関連情報のみを入力しました。

私は私が唯一の役割のUSER_ROLEを持つユーザーの数を得ることができるように、このような

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

としてGORMクエリを形成します。私は助けていただきありがとうございます!ありがとう!なし

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

2つのコマンドを別々に実行する必要があるかもしれません。幸運 – 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にクエリを発射(コンポジットクラスである)にも参加し、テーブルをモデル化することにより2つの1対多の関係に多く、多くのブレーク

あなたの役割とユーザードメインにhasManyを追加します(UserからUserRoleにhasManyを追加できますが、RoleからUserRoleにhasManyを追加することはできません)。 この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

関連する問題