[英]Query many-to-many with createCriteria in Grails
如何使用createCriteria查询多对多? 这是我的模特,
class Role {
String name
static hasMany = [users: User]
}
class User {
String name
String email
}
我的数据库中有3个由GORM生成的表,
role role_user user
--------------- ------------------------- ---------------------------------
|id |name | |role_users_id |user_id | |id |name |email |
--------------- ------------------------- ---------------------------------
|1 |Owner | |1 |1 | |1 |Harry |harry@mail.com |
|2 |Designer| |2 |2 | |2 |Hermione |hermione@mail.com|
|3 |Cleaner | |3 |3 | |3 |Ron |ron@mail.com |
--------------- ------------------------- ---------------------------------
我想让用户成为“所有者”和“设计者”,并且必须使用createCriteria
因为我将使用分页。
使用关系很难基于用户表进行查询,但是您可以通过以下方式获得所需的内容:
List<User> users = []
Role.withCriteria {
or {
eq( "name", "Owner")
eq( "name", "Designer")
}
}.each { users += it.users }
如果您愿意更改架构并将Role role
添加到User
,则可以执行以下操作:
List<User> users = User.createCriteria().list() {
role {
eq( "name", "Owner")
eq( "name", "Designer")
}
}
FYI的语法createCriteria
是一样的withCriteria
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.