2012-05-16 21 views
5

In meinem Grails-Projekt, ich habe die folgenden Klassen:Grails Kriterien Abfrage mit fetchMode eifrig mit zwei Ebenen

class A { 
    static hasMany = [cs:C] 
} 

class B { 
    static hasMany = [cs:C] 
} 

class C { 
    static belongsTo = [a:A, b:B] 
} 

Ich mag die Klasse A abfragen und die alle Verbände aus B und C mit Spannung zu bringen. Ich habe die folgende Kriterienabfrage versucht, aber wenn ich über Cs von A iteriere, verwendet Hibernate eine verzögerte Initialisierung, um B-Objekte abzufragen.

A.withCriteria() { 
    fetchmode "cs", FetchMode.JOIN 
    fetchMode "cs.b", FetchMode.JOIN 
} 

Irgendwelche Ideen?

Antwort

8

Gelöst.

A.withCriteria() { 
    cs{ 
     fetchMode "cs.b", FetchMode.JOIN 
    } 
} 

Oder

A.withCriteria() { 
    cs{ 
     b{ 
     } 
    } 
} 

In beiden Fällen Hibernate zwei Abfragen verwendet. Viel besser als die 98, die ich vorher hatte ;-)