【问题标题】:Query many-to-many with createCriteria in Grails在 Grails 中使用 createCriteria 查询多对多
【发布时间】:2015-04-29 10:10:26
【问题描述】:

如何使用 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,因为我将使用分页。

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

    使用您的关系很难根据用户表进行查询,但您可以通过以下方式获得所需的内容:

    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") 
        }
    }
    

    仅供参考,createCriteria 的语法与 withCriteria 相同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-23
      • 2011-01-04
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      相关资源
      最近更新 更多