tengo una clase de dominio siguientes:Grails: encontrar por asociación uno-a-muchos con la cadena
class User {
static hasMany = [roles:String]
}
Me gustaría encontrar a cada usuario que tiene el papel ROLE_ADMIN
. ¿Hay alguna posibilidad de hacer eso con los buscadores dinámicos? user.findAllByRoles('ROLE_ADMIN')
parece darme un error.
ACTUALIZACIÓN: es bastante fácil de consultar asociación en la Clase A
tiene una lista de clase B
casos y ambos A
y B
son clases de dominio. Pero aquí la clase A
es una clase de dominio y la clase B
es una cadena de Java simple.
El código para la consulta de asociación lista de otro dominio de objetos que contiene se vería así:
`User.findAll { roles { role_name=='ROLE_ADMIN' } }`
Lo que estoy buscando es una forma de especificar el valor de una cadena, por ejemplo:
`User.findAll { roles {THIS_VALUE=='ROLE_ADMIN' }}`
ACTUALIZACIÓN 2: según lo que he encontrado, no es posible usar criterios con colecciones de tipos primitivos. Es posible usar HQL sin embargo:
User.findAll("from User a where :roles in elements(roles)",[roles:'ROLE_ADMIN'])
Sin embargo, no es tan útil como una consulta o findAll
where
. No puedo encadenar findAll
métodos para definir otros métodos que, por ejemplo: obtener ROLE_ADMIN
usuarios con nombre de usuario como 'xxx' requiere volver a escribir toda la consulta HQL
. Tal vez es posible expresar la condición anterior HQL
en forma de una expresión where
?
¿Qué error obtiene? Simplemente decir que obtienes uno es menos que útil. – cdeszaq
Simplemente no funciona, da error sobre la consulta de hibernación incorrecta (que param # 1 no está configurado), y veo un 'where id =?' En la consulta, por lo tanto, creo que el método 'findAllByRoles' no tuvo ningún efecto. Creo que debe haber otra forma de consultar asociaciones que contengan tipos simples como 'String' – Pma
Compruebe la solución usando los criterios GORM aquí: http://stackoverflow.com/a/24211973/3738761 –