У меня есть домен пользователя, домен роли и рабочая таблица 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.

Что я делаю не так?

0
mjswartz 16 Окт 2015 в 19:30

3 ответа

Лучший ответ

Я понял это с помощью нескольких догадок и проверок.

 def roleInstance = Role.findByName("security_officer")
 def query = User.where { 
     roles { 
         id == roleInstance.id 
     } 
 }
 def securityOfficerList = query.list()
1
mjswartz 16 Окт 2015 в 17:30

У пользователя много ролей, поэтому в запросе вы не можете использовать u.roles = roleInstance. Попробуйте использовать в [список ролей] или вы можете попробовать следующий запрос: def secList = User.findAll ("from User as u where u .roles in (из роли r, где r.name =: roleInstance) ", [roleInstance: roleInstance])

0
Karen Gharibyan 16 Окт 2015 в 16:52

Роли связаны с отношениями hasMany, поэтому я думаю, что следующее должно работать.

def secList = User.findAll("from User as u where u.roles in (:roleInstance)", [roleInstance:[roleInstance]]) 
0
Uday 16 Окт 2015 в 16:46