2015-10-16 61 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”] –