2015-03-31 76 views
0

我有域類如下:如何在Grails中使用createCriteria進行多對多關係?

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 
} 

我收到了客戶的uniqueName從params.uniqueName。我想查找具有belongsTo帳戶的所有用戶列表。

我想使用criteria(),因爲我想在分頁中完成它。

我嘗試像下面的代碼,它的工作,但它不能做一個分頁。

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

我該怎麼做?

回答

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

試試這個:

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

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

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

試試這個: 添加到用戶:

static belongsTo = [role:Role] 

,並使用此標準:

User.createCriteria().listDistinct { 
    role{ 
    account{ 
    eq("uniqueName", params.uniqueName) 
    } 
    } 
} 
相關問題