繁体   English   中英

在Grails中使用createCriteria查询多对多

[英]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.

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