# Hibernate - wie werden Kind-Objekte nachgeladen?



## Toma (15. Nov 2007)

Es geht also um das Ladeverhalten, wenn ein Objekt, weitere Objekte
enthält, vor allem dann, wenn man gleich alle Objekte auf einmal
benötigt (also lazy auf false).

Das lazy-Attribut regelt ja nur, ob enthaltene "Kind-Objekte" geladen
werden sollen. Ist dieses auf false gesetzt, so wird für jedes
Kind-Objekt eine neue Select-Abfrage gesendet.
- select Kinder von ObjektA -> liefert z.B. Objekt B, und Objekt C
- dann werden die Kinder von Objekt B und C mit jeweils einer weiteren Select-Abfrage ermitteln usw.

Schneller wäre allerdings eine Abfrage, die eine Liste aller Objekte zusammen mit
Ihren Vater-Objekten liefert. Dieses Abfrage-Ergebnis müsste dann
natürlich geparst werden, um die einzelnen Objekte zu erstellen.
Bei mir werden es mehrere tausend Objekte sein, deswegen könnte es eine
Rolle spielen.

Der Vorteil bei der 2. Variante wäre, dass nur 1 Datenbankabfrage gesendet wird.

Ist so etwas in Hibernate möglich, oder werden die einzelnen Select-Anweisungen sogar optimiert und zu einer verbunden?

Viele Grüße,
Tom


----------



## HoaX (15. Nov 2007)

also dass für jedes kind eine eigene query abgesetzt wird glaub ich nicht, ich hab da zwar noch nie so wirklich aufgepasst, aber ich hab immer show_sql an und da wäre mit das sicherlich aufgefallen beim entwickeln ... da deine frage aber so in die tiefe geht würde ich dir raten dich an das forum von hibernate selbst zu wenden.


----------



## Toma (15. Nov 2007)

danke hoax für deine antwort

ich habe es vielleicht nicht ganz richtig beschrieben, weil du mich leicht falsch verstanden hast.

es wird nicht für jedes Kind-Objekt eine neue Abfrage gesendet.

Angenommen das Objekt A (z.B. ein Ordner wie im Windows-Explorer), enthält zwei weitere Objekte B und C.
Dann werden diese beiden Kinder B und C in einer einzigen Abfrage ermittelt.
Das ist so schon richtig.

Die Kinder von B und C aber werden jeweils mit neuen Abfragen ermittelt und das setzt sich so fort.

Effizienter wäre eine Abfrage die z.B. folgendes Ergebnis liefert:

knoten, parent-Knoten:

A, null
B, A
C, A
D, B
E, B
F, B

=> die Knoten D,E und F wären demnach also Kinder von B


----------



## Guest (15. Nov 2007)

Inner-Join-Fetch
	
	
	
	





```
select f 
  from Father f
       join fetch f.children
```
Outer-Join-Fetch
	
	
	
	





```
select f
  from Father f
       left join fetch f.children
```
Es geht auch über mehrere Ebenen
	
	
	
	





```
select f
  from Father f
       join fetch f.children c
       join fetch c.grandchildren g
       join fetch g.friends
```
Damit sollte man aber mit Bedacht umgehen, da es die zu übertragende Datenmenge von der DB vervielfacht.


----------

