Bonjour à tous,
Je rencontre un problème auquel je ne trouve pas de solution dans la doc d'Hibernate.
Je vais essayer d'être le plus clair possible.
Disons que j'ai 3 classes.
La première :
La deuxième:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Piece{ int id; List composants; }
La dernière:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class Composant{ int id; Article article; Piece piece; }
Le mapping des relations est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Article{ int id; String nom; }
Pièce<->Composant
Dans piece.hbm.xml:
Dans composant.hbm.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <list name="composants" table="COMPOSANT" inverse ="false"> <key column="ID_PIECE" /> <index column="PSN" /> <one-to-many class="production.Composant" /> </list>
Composant -> Article:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <many-to-one name="piece" class="production.Piece" update="false" insert="false" fetch="select"> <column name="ID_PIECE" precision="10" scale="0" not-null="true" /> </many-to-one>
Je souhaite récupérer un certains nombre de pieces depuis une requête basée sur l'API Criteria.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 <many-to-one name="article" class="production.Article" update="false" insert="false" fetch="select"> <column name="ID_ARTICLE" precision="10" scale="0" not-null="true" /> </many-to-one>
Le code ressemble à ceci:
Le problème est que ma liste ret contient des doublons d'instances de Piece.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Criteria crit = session.createCriteria(Piece.Class); crit.addRestrictions... crit.setFetchMode("composants",FetchMode.JOIN); crit.setFetchMode("composants.article",FetchMode.JOIN); List ret = crit.list();
En fait, il y'a autant d'entrées que de Composants liés au pièces retournées.
Par exemple si toutes mes pièces ont 2 composants, alors il y'aura 1 doublon pour chacune des pièces.
Pourtant, chacune des pièces est bien chargée. J'arrive parfaitement à faire :Auriez-vous une solution pour éviter les doublons?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Piece p = (Piece)ret.get(0); p.getComposants.get(0); p.getComposants.get(1); ...
Merci d'avance!
Partager