Criteria,FetchMode.JOIN et collection
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 :
Code:
1 2 3 4 5
|
public class Piece{
int id;
List composants;
} |
La deuxième:
Code:
1 2 3 4 5 6
|
public class Composant{
int id;
Article article;
Piece piece;
} |
La dernière:
Code:
1 2 3 4 5
|
public class Article{
int id;
String nom;
} |
Le mapping des relations est le suivant:
Pièce<->Composant
Dans piece.hbm.xml:
Code:
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> |
Dans composant.hbm.xml:
Code:
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> |
Composant -> Article:
Code:
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> |
Je souhaite récupérer un certains nombre de pieces depuis une requête basée sur l'API Criteria.
Le code ressemble à ceci:
Code:
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(); |
Le problème est que ma liste ret contient des doublons d'instances de Piece.
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 :
Code:
1 2 3 4 5
|
Piece p = (Piece)ret.get(0);
p.getComposants.get(0);
p.getComposants.get(1);
... |
Auriez-vous une solution pour éviter les doublons?
Merci d'avance!