J'ai un Order
qui possède une liste de OrderTransactions
et je l'ai mappé avec un mappage Hibernate de un à plusieurs comme ceci :
@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
return orderTransactions;
}
Ces Order
ont également un champ orderStatus
qui est utilisé pour le filtrage avec les critères suivants :
public List<Order> getOrderForProduct(OrderFilter orderFilter) {
Criteria criteria = getHibernateSession()
.createCriteria(Order.class)
.add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
return criteria.list();
}
Cela fonctionne et le résultat est conforme aux attentes.
Maintenant voici ma question : Pourquoi, lorsque je définis explicitement le type de récupération à EAGER
faites le Order
apparaissent plusieurs fois dans la liste résultante ?
@OneToMany(targetEntity = OrderTransaction.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
return orderTransactions;
}
Comment devrais-je modifier mon code de critères pour obtenir le même résultat avec le nouveau paramètre ?
1 votes
Avez-vous essayé d'activer show_sql pour voir ce qui se passe en dessous ?
0 votes
Veuillez ajouter le code des classes OrderTransaction et Order également.