2012-09-19 12 views
8

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 findAllwhere. 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?

+0

¿Qué error obtiene? Simplemente decir que obtienes uno es menos que útil. – cdeszaq

+0

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

+0

Compruebe la solución usando los criterios GORM aquí: http://stackoverflow.com/a/24211973/3738761 –

Respuesta

5

Tal vez usted puede hacer algo como:

si ya tiene una lista de usuarios (lista_usuarios)

def list = userList.findAll { user -> user.roles =~ 'ROLE_ADMIN' } 

Esperanza esta ayuda!

+1

Creo que este código de criterio no funciona. ¿Qué significa 'tags' aquí? – Pma

Cuestiones relacionadas