Maison > Java > javaDidacticiel > ## 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
Libérer: 2024-10-26 04:18:02
original
502 Les gens l'ont consulté

## 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
Copier après la connexion

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() );
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal