2015-10-16 48 views
0

我有編碼的用戶側的用戶域和角色域和工作joinTable作爲Grails的joinTable查詢問題

static hasMany = [ roles: Role ] 
... 
static mapping = { 
    table 'user_data' 
    id column: 'employee_number', name: 'employeeNumber', generator: 'assigned', type: 'int' 
    version false 
    sort 'lastName' 

    roles joinTable: [ name: 'user_role' ] 

} 

我想查詢數據庫,把所有用戶提供一個安全員角色與

def roleInstance = Role.find { name == 'security_officer' } 
def secList = User.findAll("from User as u where u.roles = :roleInstance", [roleInstance:roleInstance]) 

但我得到的錯誤

Class: com.microsoft.sqlserver.jdbc.SQLServerException 
Message: The value is not set for the parameter number 1. 

我在做什麼錯?

回答

1

我想通了一大堆猜測和檢查。

def roleInstance = Role.findByName("security_officer") 
def query = User.where { 
    roles { 
     id == roleInstance.id 
    } 
} 
def securityOfficerList = query.list() 
+1

接受您的答案爲正確答案,以解除此問題爲未答覆:-) – Neoryder

+0

此處存在同樣的問題。您的解決方案奏效:) –

0

角色是hasMany關係,所以我認爲下面應該工作。

def secList = User.findAll("from User as u where u.roles in (:roleInstance)", [roleInstance:[roleInstance]]) 
+0

我仍然得到同樣的錯誤 – mjswartz

0

用戶有很多的角色,所以在查詢中不能使用u.roles = roleInstance.Try在[角色列表]使用或者你可以嘗試以下查詢: 高清secList = User.findAll (「from User as u where u.roles in(from Role r where r.name =:roleInstance)」,[roleInstance:roleInstance])

+0

我得到一個新的錯誤類:java.lang.ClassCastException //消息:角色不能轉換爲java.lang.String任何想法? – mjswartz

+0

將[roleInstance:roleInstance]替換爲[roleInstance:「security_officer」] –