假设我有两个类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 :(得分:1)
没有将hasMany添加到您的角色和用户域(您可以从User到UserRole添加hasMany,但不应该从Role添加到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通常在数据库上表现不佳。它可以用于维护功能,也可以不经常执行。
答案 1 :(得分: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
}