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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>Le problème est qu'Hibernate me génère la requête suivante (que j'ai simplifié) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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>
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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=?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
Partager