3

我正在开发 Grails 应用程序。我们有一个名为 User 的域对象,而 User 的属性之一是 Role 对象列表。角色有一些属性,其中之一是“名称”。

我需要找到在其角色列表属性中具有特定名称的角色的所有用户对象。

User: List<Role> roles

Role: String name

因此,给定一个用户列表,我需要找到所有在其角色列表属性中具有名为“SUPERUSER”的角色的用户。

后端的数据库是 MongoDB,所以我们不能使用 SQL 查询或类似的东西(应用程序根本不使用 Hibernate)。据我所知,动态查找器和 CriteriaBuilder 解决方案都可以。

任何帮助,将不胜感激。我想我忽略了一些明显的事情,因为在我看来这并不应该那么难。至少,如果我正在编写 SQL,则不会。

4

3 回答 3

1

如果 Role 是一个单独的域对象,则不能直接这样做,因为 mongo 不支持连接。这通常在 mongo 中完成的方式是在用户对象中嵌入角色集合。因此,如果您像这样对 User 建模:

class User {
    List roles
    static embedded = ['roles']
}

然后,您将能够使用条件或 where 查询,如下所示:

def superusers = User.where { roles.name == 'SUPERUSER' }
于 2013-02-27T17:50:14.857 回答
0

那么条件查询呢:

List superUsers = User.withCriteria {
    roles {
        eq('name', 'SUPERUSER')
    }
}
于 2013-02-27T17:12:34.207 回答
0

在这种情况下您可以使用 HQL(未经测试,可能需要一些调整):

def users = User.executeQuery("s from User s inner join UserRole ur on s = ur.user where ur.role = :role", [role: Role.findByName("MYROLE")])
于 2013-02-27T16:17:03.393 回答