如何在Grails中将createCriteria用于多对多关系?

时间:2015-03-31 04:50:51

标签: grails gorm

我有以下域类:

class Account {
    String name
    String uniqueName
    static hasMany = [roles:Role]
}

class Role {
    String name
    static belongsTo = [account:Account]
    static hasMany = [users: User]
}

class User {
    String name
}

我从params.uniqueName收到了帐户的uniqueName。我想找到所有具有belongsTo帐户角色的用户列表。

我想使用criteria()因为我想在分页中执行它。

我尝试下面的代码,它的工作但它无法进行分页。

def account = Account.findByUniqueName(params.uniqueName)
def roles = account.roles
[users : roles.users.flatten().unique()]

我该怎么做?

3 个答案:

答案 0 :(得分:1)

试试这个: 添加到用户:

static belongsTo = [role:Role]

并使用此标准:

User.createCriteria().listDistinct {
   role{
    account{
     eq("uniqueName", params.uniqueName)
    }
   }
}

答案 1 :(得分:0)

您可以使用此类条件。

  List<Account> results =Account.createCriteria().list 
       { 
       eq('uniqueName', params.uniqueName) 
       maxResults(params.max as int)
       firstResult(params.offset as int)
       order(params.order, "asc")
       } 

答案 2 :(得分:0)

试试这个:

Account account = Account.findByUniqueName(params.uniqueName)
Collection users = []

 account.roles.each{ role ->
  users += role.users
}

log.info("Users for ${params.uniqueName} account : ${users}"