2012-12-22 100 views
1

我是grails新手,遇到性能問題。 我有三個域類:根據GORM查詢中的字段過濾出對象

User{ 
Set authorities 
static hasMany = [authorities: Role] 
} 

Organization{ 
//more code 
} 

UserOrganization{ 
User user 
Organization organization 
} 

有分配給一個用戶(「ROLE_ADMIN」,「ROLE_MANAGER」)

在一個場景中我組織的名單,我需要很多角色(當局)找出所有具有這些組織的經理權限(ROLE_MANAGER)的用戶。

我嘗試使用GORM是這樣的:

UserOrganization.createCriteria().list{ 
inList('organizaton',organizationList) 
//but do not know how to filter out users with ROLE_MANAGER authority 
} 

有什麼辦法得到它在單一的查詢格姆這樣做呢? 我可以獲得這些組織的所有用戶的列表,並運行retainAll {closure}來過濾出管理者,但這將是一個兩步過程並造成性能瓶頸。

回答

1
UserOrganization.createCriteria().list{ 
    inList('organizaton',organizationList) 
    user { 
     inList('authorities',authoritiesList) 
    } 
} 

Btw。你並不需要明確寫入authorities格姆會爲您創建它:

User { 
    static hasMany = [authorities: Role] 
} 

在要確保當局將是Set或其他集合類型的情況下,你應該接着寫:Set authorities

相關問題