2010-10-29 18 views
5

Ich habe versucht, einen Kriterien-Builder zu erstellen, der eine anglo-Relation enthält und noch nicht erfolgreich ist. Betrachten Sie das folgende Modell:Kann keine Grails erstellen Criteria-Abfrage, die eine angsonsTo-Relation enthält

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

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

Ich versuche, die folgende Abfrage zu machen:

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

Alles, was ich bin immer ist der folgende Fehler

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) 

ich habe versucht, Fügen Sie der Kriterienabfrage verschiedene kleine Ergänzungen hinzu:

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

Aber immer noch das gleiche Problem.

Ich habe sogar versucht, die folgende statische Zuordnung zum Msg Klasse hinzuzufügen:

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

noch nicht funktioniert.

Gibt es eine Möglichkeit, den Kriterienersteller zu verwenden, der überhaupt eine angabesuche enthält?

Vielen Dank für Ihre Hilfe im Voraus.
Lucien

Antwort

5

Ich habe die Lösung gefunden! Das Problem bezog sich überhaupt nicht auf den Kriteriengenerator. In diesem Fall hatte ich eine Benutzervariable innerhalb des Bereichs. Einmal entfernt es funktioniert wie ein Charme :-)

+0

half es, nachdem ich meinen Kopf lange geschlagen hatte. Fehler gibt keine Hinweise auf dieses Problem. Danke für das Teilen –

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

Was ist der Unterschied aus dem obigen Beispiel? –

+0

Ihre createCritia-Anweisung sieht falsch aus, fehlt "()" –

+0

Sorry, ich falsch geschrieben .. Es sollte natürlich ein "()" enthalten. Korrigieren. –