我正在开发Grails应用程序。我们有一个名为User的域对象,User的一个属性是Role对象列表。角色有一些属性,其中一个是“名称”。
我需要找到在其Role列表属性中具有特定名称的角色的所有User对象。
User: List<Role> roles
Role: String name
因此,给定一个用户列表,我需要找到在其角色列表属性中具有名称为“SUPERUSER”的角色的所有用户。
后端的数据库是MongoDB,所以我们不能使用SQL查询或类似的东西(应用程序根本不使用Hibernate)。动态查找器是可以的,就像我可以说的那样,这是CriteriaBuilder解决方案。
任何帮助将不胜感激。我想我忽略了一些显而易见的东西,因为在我看来它应该是那么难。如果我正在编写SQL,至少不会这样。
答案 0 :(得分:1)
如果Role是一个单独的域对象,则不能直接执行此操作,因为mongo不支持连接。通常在mongo中完成此操作的方法是在用户对象中嵌入一组角色。因此,如果您像这样建模用户:
class User {
List roles
static embedded = ['roles']
}
然后你就可以使用标准或者像这样的查询:
def superusers = User.where { roles.name == 'SUPERUSER' }
答案 1 :(得分: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")])
答案 2 :(得分:0)
标准查询怎么样:
List superUsers = User.withCriteria {
roles {
eq('name', 'SUPERUSER')
}
}