One-to-one sur 2 classes = 1 select + 2 outer join
Bonjour à tous,
j'ai deux classes AntivirusFirewall et AntivirusFirewallInstallation, qui sont liées tous les deux par une relation one-to-one, telle que définit de la façon suivante :
Code:
1 2 3 4 5 6 7 8
|
<union-subclass name="AntivirusFirewall" table="av_fw">
<property column="numdossier" name="numDossier" not-null="true" type="string" />
<one-to-one cascade="all" fetch="join" class="AntivirusFirewallInstallation" lazy="false" name="Installation" />
</union-subclass> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
<class name="AntivirusFirewallInstallation" table="av_fw_installation">
<id column="cle" name="Cle" type="string">
<generator class="foreign">
<param name="property">AntivirusFireWall</param>
</generator>
</id>
<property column="datecreat" name="Date" type="date" />
<one-to-one cascade="all" fetch="join" class="AntivirusFirewall" lazy="false" name="AntivirusFirewall" />
</class> |
Le problème est qu'Hibernate me génère la requête suivante (que j'ai simplifié) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
select
this_.iduser as iduser109_2_,
this_.numdossier as referer109_2_,
avf2_.cle_finale as cle1_116_0_,
avf2_.datecreat as datecreat116_0_,
avf3_.iduser as iduser109_1_,
avf3_.numdossier as referer109_1_,
from
av_fw this_
left outer join
av_fw_installation avf2_
on this_.iduser=avf2_.cle_finale
left outer join
av_fw avf3_
on avf2_.cle_finale=avf3_.iduser
where
this_.numdossier=? |
Comme vous pouvez le constater, pour un accès à seulement deux tables, Hibernate génère un select sur la table AntivirusFirewall, un outer join sur la table AntivirusFirewallInstallation pour récupérer l'installation associée, et de nouveau un outer join sur la table AntivirusFirewall pour récupérer l'antivirus associée à l'installation. 8O Je pense que le dernier outer join est inutile puisque les informations qu'il récupère sont exactement les mêmes que pour le select original.
Est-ce qu'il y a moyen de changer mon mapping pour éviter le dernier outer join, consommateur inutile de ressources ?
Merci par avance pour vos réponses,
MiniMarch