grails - 如何找到在多对多关系中具有单个角色的用户?

标签 grails gorm

可以说我有两个类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的用户数。感谢您的帮助!谢谢!

最佳答案

而不将hasMany添加到您的角色和用户域中(您可以将hasMany从User添加到UserRole,但不应从角色到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)])

但是,这些选择通常在数据库上表现不佳。可以使用维护功能,也可以不经常执行。

关于grails - 如何找到在多对多关系中具有单个角色的用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39486975/

相关文章:

grails - Grails 2.1在JBoss上禁用log4j配置

grails - Grails 3.2-对象版本不会更新

grails - Grails:简单的hasMany关系创建了不必要的表

hibernate - 发生异常后如何解决不刷新 session 的问题

Grails 组的属性和顺序。这个怎么运作?

javascript - onclick 函数的问题

grails - Grails从2.4.5升级到3.3.2:关系 'xxx'不存在

grails - 如何构造Grails Services,使父类(super class)方法是非事务性的而子类方法是事务性的?

grails - 在grails中没有hibernate property-ref等效项

grails - 填充Grails g:从函数中选择