Pour complété, tout va dépendre de la structure physique des tables voulue.
Si par exemple ta classe "Parent" fait référence à une table qui contient les propriétés de la classe et que tes tables ChildA, ChildB et ChildC contiennent les colonnes spécifiques alors, le plus souvent, on utilise une stratégie JOINED.
On passe par une colonne discriminante pour faire le distinguo
On peut donc faire une requête directement sur la classe "Parent" qui renverra un mixe de ChildA, ChildB et ChildC.
Si par contre tu veux avoir 3 tables ChildA, ChildB, ChildC qui ont des colonnes communes (représentées par les propriétés de ta classe Parent), c'est une autre stratégie TABLE_PER_CLASS et ta classe Parent est "abstract".
Enfin, tu peux mettre toutes les propriétés dans une seule table et ventiler dans plusieurs classes via la stratégie SINGLE_TABLE
Cependant, dans d'autres contextes, on peut être amené à exprimer une jointure sur une propriété d'une entity représentant une autre entity pour précharger en une seule requête les données des 2 tables (ou plus).
On ferait quelque chose comme
select a from ClasseA a left join fetch a.classeB b ...
Petit correctif par rapport à ce qu'a indiqué PhilippeGibault, en JPQL ce serait plutôt
select a from Parent a ...
En Hibernate natif (HQL), on a un raccourci
Partager