Maison >Java >javaDidacticiel >## Pourquoi les critères d'hibernation renvoient-ils les commandes en double avec FetchType.EAGER ?
Les critères d'Hibernate renvoient les commandes en double avec FetchType.EAGER
Question :
Lors de la définition du récupérer le type de la liste orderTransactions d'une commande dans FetchType.EAGER, pourquoi les commandes apparaissent-elles plusieurs fois dans la liste résultante récupérée à l'aide de critères ?
Réponse :
Ce comportement est attendu. Avec FetchType.EAGER, une jointure est effectuée pour récupérer avec impatience les orderTransactions. Cela donne le même nombre de résultats qu'une jointure SQL standard, où chaque commande sera présente dans l'ensemble de résultats pour chaque orderTransaction correspondante.
Pour comprendre cela, considérez l'instruction SQL générée :
SELECT o.*, l.* from ORDER o LEFT OUTER JOIN LINE_ITEMS l ON o.ID = l.ORDER_ID
Dans cette instruction, pour chaque commande, tous les éléments de campagne associés seront récupérés, conduisant à plusieurs instances de la même commande dans l'ensemble de résultats.
Solution pour obtenir des résultats distincts :
Pour filtrer les résultats en double avec FetchType.EAGER, vous pouvez utiliser un type Collection qui maintient l'ordre d'insertion, tel qu'un LinkedHashSet :
Collection<Order> result = new LinkedHashSet( session.createCriteria(Order.class) .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow())) .list() );
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!