Bonjour,

Je m'interroge sur ces 2 options d'hibernate (que l'on peut indiquer dans un mapping de collection ou un mapping many-to-one, one-to-one ...)

1. Il semble que outer-join existe en hibernate v2 et v3 tandis que fetch n'apparait que dans la v3.

2. outer-join = true permet d'avoir une jointure et de charger en un seul select plusieurs éléments

Ex dans le fichier Mother.hbml.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 <many-to-one name="child" outer-join="true" lazy="false"/>
Dans ce cas le chargement de mother et de child va se faire en un seul select. Que se passe t-il si lazy = true ?

3. fetch. Je ne comprends pas la différence entre fetch = join et outer-join = true. la doc d'hibernate dit
Par ailleurs, une jointure "fetchée" (rapportée) permet d'initialiser les associations ou collections de valeurs en même temps que leur objet parent, le tout n'utilisant qu'un seul Select. Ceci est particulièrement utile dans le cas des collections. Ce système permet de surcharger les déclarations "lazy" et "outer-join" des fichiers de mapping pour les associations et collections.
Donc si fetch = join, est ce que outer-join et lazy ne servent à rien ?


4. On peut déclarer fetch et join dans le mapping mais aussi directement dans la requête. Ex de la doc hibernate :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
from eg.Cat as cat 
    inner join fetch cat.mate
    left join fetch cat.kittens
Si le mapping et la requête n'ont pas les même "options" qui est prioritaire.

Merci de m'éclairer sur ce sujet