NHibernate Entitäten die von einer Abfrage (Criteria) zurück kommen werden nicht "verproxied"

7 views
Skip to first unread message

lcorneliussen

unread,
Oct 29, 2009, 10:25:52 AM10/29/09
to altnetde
Hi,

ich habe ein ziemlich dringendes Problem :(

Schlage mich NHibernate rum, weil es zwar bei einem session.Load()
lazy loading für die Assoziationen erstellt, nicht aber, wenn ich das
selbe Objekt über eine Query hole.

Habe das hier inkl. Code gepostet. Bin für jede Hilfe dankbar!

http://stackoverflow.com/questions/1643905/nhibernate-creates-proxy-via-session-load-but-not-via-linq-or-criteria-api

lg,
Lars

Sebastian Jancke

unread,
Oct 29, 2009, 10:51:42 AM10/29/09
to altn...@googlegroups.com
Lars,

kannst du bitte konkreter sagen was "LL funktioniert nicht" heißen soll? Läd er alle Assoziationen sofort? Läd er sie später aber mit N+1 Selects? Versucht er sie später zu laden aber die Session ist zu? Läd er sie später gar nicht?

Gruß
Sebastian

Sebastian Jancke

unread,
Oct 29, 2009, 10:53:34 AM10/29/09
to altn...@googlegroups.com
Welche NH Version hast du eigentlich?

Sebastian Jancke

unread,
Oct 29, 2009, 10:57:54 AM10/29/09
to altn...@googlegroups.com
Die aktuelle NH-Reference ist zu LL etwas wiedersprüchlich.

Bei der Doku zu den Mappings steht, das lazy=true der Default ist.

Im Abschnitt "Lazy Initialization" steht allerdings zu Collections:

Since lazy initialization can lead to bugs like that above, non-laziness is the default. However, it is intended that lazy initialization be used for almost all collections, especially for collections of entities (for reasons of efficiency).
 
hope that helps.

-Sebastian

Markus Zywitza

unread,
Oct 31, 2009, 7:08:43 AM10/31/09
to altn...@googlegroups.com
Session.Load() erstellt zwar auch einen Proxy, hat aber mit Lazy
Loading (von referenzierten Objekten) nichts zu tun. LL muss über das
Mapping erreicht werden.

Wenn ein mit Load() erstelltes Objekt keine Referenzen nachlädt, kommt
das daher, dass es sich um einen vollkommen uninitialieserten Proxy
handelt. Sobald Du irgendeine Eigenschaft des Objekts abfragst, wird
der Proxy initialisiert und damit alle Referenzen geladen, sofern dies
nicht über LL unterbunden wird.

Bei einer Query wird erst gar kein Proxy erstellt, deshalb werden die
referenzierten und Collections gleich nachgeladen.

-Markus
Reply all
Reply to author
Forward
0 new messages