Bonjour
Je rencontre un petit problème d'optimisation avec une requête générée suite à l'utilisation d'un DetachedCriteria.
Après une (rapide) recherche, je n'ai pas trouvé de sujet s'approchant de ça sur le forum.
Exposé du problème :
Soit 3 tables A, B et C contenant chacune des champs Id, Libelle et diverses valeurs.
De plus, A contient une référence à B qui contient une référence à C.
Je dois trouver tous les A pour lesquels j'ai un C avec un id = 1
Mon code est comme ceci ça :
Code:
DetachedCriteria critCibles = DetachedCriteria.forClass(LienUslUdi.class);
critCibles.createAlias("B", "tableB");
critCibles.createAlias("tableB.C", "tableC");
critCibles.setFetchMode("tableB", FetchMode.SELECT);
critCibles.setFetchMode("tableC", FetchMode.SELECT);
critCibles.add(Restrictions.eq("tableC.id", 1));
List<A> lesCibles = findByCriteria(critCibles);
Les contenus des tables B et C ne m'intéressent pas le moins du monde.
La requête générée pour cela est (en vous faisant grâce des alias) :
Code:
select this_.id,
this_.libelle,
this_.val1,
this_.val2,
B1_.id,
B1_.libelle,
B1_.idTableA,
B1_.val1,
B1_.val2,
C1_.id,
C1_.idTableB,
C1_.libelle,
C1_.val1
from A this_
inner join B B1_ on this_.id=B1_.id
inner join C C1_ on B1_.id=C1_.id
and C1_.id=?
Alors que tout ce que je voudrais est :
Code:
select this_.id,
this_.libelle,
this_.val1,
this_.val2
from A this_
inner join B B1_ on this_.id=B1_.id
inner join C C1_ on B1_.id=C1_.id
and C1_.id=?
Une idée, une piste ?
merci.