Maison  >  Article  >  Java  >  ## Pourquoi les critères d'hibernation renvoient-ils les commandes en double avec FetchType.EAGER ?

## Pourquoi les critères d'hibernation renvoient-ils les commandes en double avec FetchType.EAGER ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 04:18:02428parcourir

## Why Does Hibernate Criteria Return Duplicate Orders with 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn