繁体   English   中英

Grails域类查询 - 如何通过链接到另一个域类的字段找到?

[英]Grails domain class query - how can I find by fields that link to another domain class?

可以说我有两个域类:

class User {
  String name
  Role role
}

class Role {
  String name
  static belongsTo = [user: User]
}

我创建了一些记录:

def r1 = new Role(name: "role1").save()
def r2 = new Role(name: "role2").save()
new User(name: "user1", role: r1).save()
new User(name: "user2", role: r2).save()
new User(name: "user3", role: r1).save()

我现在如何按角色选择我的用户? 我希望能够做到以下其中一项:

def role = Role.findByName("role1"); //returns a Role with [ id:1 name:"role1" ]
User.findAllByRole(role) //returns null
User.findAllByRole(new Role(name: "role1")) //returns null
User.findAllByRole(role.id) //returns null
User.findAllByRole(id: role.id) //returns null

域类是否可以使用动态find *方法查找其他关联的域类? 我可以使用namedQueries来做,但是id而不是因为我不想为域域类之间的每个关系写出来

似乎findBy *和findAllBy *方法可以正常工作,如果您需要事先检索需要查找的对象。 它似乎必须是对数据库中对象的精确(非陈旧?)引用,因此您不能创建一个“看起来”像您想要查找的对象的新对象,它实际上必须该对象。

因此,为了找到角色为“role1”的所有用户:

def role = Role.findByName("role1")
def users = User.findAllByRole(role)
for (def user in users) {
 println("User ${user.name} matched the query, with role: ${user.role.name}")
}
//prints:
//User user1 matched the query, with role role1
//User user3 matched the query, with role role1

User.findAllByRole(role)不适用于单元测试。 艾琳,我相信这让你很困惑。

在单元测试下,似乎无法查询协会。 我已经尝试过这种方式: User.findAllByRole(role.id) ,虽然不是在单元测试之外,但它仍然有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM