2010-10-29 13 views
5

He intentado crear un generador de criterios que contenga una relación de belongsTo y aún tengo que tener éxito. Considere el siguiente modelo:No se puede crear una consulta de criterios de Grails que contenga una relación de belongsTo

class Msg { 
    ... 
    static belongsTo = [user: User] 
    ... 
} 

class User { 
    ... 
    Organisation organisation 
    ... 
} 

que estoy tratando de hacer la siguiente consulta:

Msg.createCriteria().list() { 
    ... 
    user { 
     eq("organisation", organisationInstance) 
    } 
    ... 
} 

Todo lo que estoy recibiendo es el siguiente error

ERROR errors.GrailsExceptionResolver - No signature of method: static User.call() is applicable for argument types: (MsgService$_findMessages_closure1_closure6) values: [[email protected]] 
Possible solutions: save(), wait(), any(), getAll(), save(java.lang.Boolean), save(java.util.Map) 

He tratado de Agregue diferentes pequeñas adiciones a la consulta de criterios como:

join "user" 
fetchMode("user", org.hibernate.FetchMode.EAGER) 

Pero todavía tiene el mismo problema.

Incluso he intentado añadir la siguiente asignación estática a la clase de error:

static mapping = { 
    columns { 
     user lazy: false 
    } 
} 

Todavía no funciona.

¿Hay alguna forma de usar el generador de criterios que contenga una consulta belongsTo?

Gracias por su ayuda con anticipación.
Lucien

Respuesta

5

he encontrado la solución! El problema no estaba relacionado con el generador de criterios en absoluto. En este caso, tenía una variable de usuario dentro del alcance. Una vez quitado, funciona como un amuleto :-)

+0

me ayudó después de golpear mi cabeza por mucho tiempo. El error no dio ningún tipo de pista con respecto a este problema. Gracias por compartir –

2
def criteria = Msg.createCriteria() 
results = criteria.list{ 
    user{ 
     eq("organisation", organisationInstance) 
    } 
} 
+0

¿Cuál es la diferencia con el ejemplo anterior? –

+0

su declaración createCritia parece incorrecta, falta "()" –

+0

Lo siento, escribí mal .. Por supuesto, debe contener un "()". De corrección. –

Cuestiones relacionadas