Grails GORM Kriterien Abfrage Eager-Fetching

Ich geschrieben habe, einen Kriterien-Abfrage in einem Grails-service-Klasse, wo ich erwarte, dass ein eifriger join durchgeführt werden, und um zu vermeiden, lazy loading von Kind-Objekten bei der Darstellung meiner Ergebnisse entweder als JSON-Antwort oder in meinem GSP. Die Abfrage wie erwartet ausgeführt (Einstellung meine überwintern.show_sql=true in meinem DataSource.grooviger ich kann sehen, dass die Abfrage), aber wenn ich Crawlen der Verein in meine Aps kann ich sehen, dass Hibernate ist die Ausführung der Abfragen, als ob es verzögert das laden der Verbände. Ich bin nicht davon überzeugt, dass der 'eager loading' auch tatsächlich funktioniert. Ich will nicht zu setzen, faul:falsch in meiner domain-Klasse, die für diese Verbände.

Dies ist die Kriterien-Abfrage:

def market = Market.withCriteria(uniqueResult:true){
    idEq(marketId)
    fetchMode 'resourceAssignments', FetchMode.JOIN
    fetchMode 'resourceAssignments.userRole', FetchMode.JOIN
    fetchMode 'resourceAssignments.userRole.role', FetchMode.JOIN
    fetchMode 'resourceAssignments.userRole.user', FetchMode.JOIN
    resourceAssignments{
        userRole{
            role{
                'in'('name', roleNames)
            }
        }
    }           
}

Obige Abfrage zurückgegeben, ohne Probleme. Wenn ich versuche, den folgenden code ausführen, obwohl, in meinem GSP, ich kann sehen, dass Hibernate die Ausstellung ist eine zweite Abfrage, als wäre es träge Holen die resourceAssignments:

<g:each in="${market.resourceAssignments}" var="ra">
</g:each>

Ich habe sogar versucht das überschreiben der OpenSessionInViewInterceptor mit einem No-Op-interceptor, durch das erstellen einer leeren WebRequestInterceptor und Einstellung der openSessionInViewInterceptor in den Ressourcen.groovy zu verwenden. Sobald ich dies getan hatte, bekomme ich eine org.hibernate.LazyInitializationException, die scheint zu bestätigen, was ich dachte -, dass Hibernate oder GORM ist immer noch versuchen, führen Sie eine zweite Abfrage, auch wenn ich angegeben habe, dass ich wollen eifrig, daß die Verbände.

InformationsquelleAutor David Malone | 2013-02-07
Schreibe einen Kommentar