Maison > Java > javaDidacticiel > Pourquoi les critères Hibernate renvoient-ils les commandes en double avec FetchType.EAGER ?

Pourquoi les critères Hibernate renvoient-ils les commandes en double avec FetchType.EAGER ?

Barbara Streisand
Libérer: 2024-10-26 01:40:28
original
760 Les gens l'ont consulté

Why Does Hibernate Criteria Return Duplicate Orders with FetchType.EAGER?

Les critères Hibernate renvoient les commandes en double avec FetchType.EAGER

Considérez le mappage Hibernate suivant :

@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Copier après la connexion

Avec ceci mappage, vous pouvez filtrer les commandes à l'aide de leur champ orderStatus :

public List<Order> getOrderForProduct(OrderFilter orderFilter) {
    Criteria criteria = getHibernateSession()
            .createCriteria(Order.class)
            .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
    return criteria.list();
}
Copier après la connexion

Cependant, lorsque le type de récupération est explicitement défini sur EAGER, la liste résultante contient des commandes en double.

La raison pour les doublons

Avec FetchType.EAGER, Hibernate effectue une opération de jointure pour récupérer avec impatience les OrderTransactions associées. En conséquence, chaque commande de la liste résultante sera dupliquée pour chaque OrderTransaction associée. C'est le comportement attendu dans ce scénario.

Obtention de résultats distincts

Pour obtenir des commandes distinctes malgré la récupération rapide, vous pouvez utiliser le code suivant dans votre requête Critères :

Criteria criteria = getHibernateSession()
            .createCriteria(Order.class, "o")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Copier après la connexion

Ressources supplémentaires

Pour plus d'informations sur ce comportement, reportez-vous aux ressources suivantes :

  • [FAQ Hibernate sur Distinct Résultats de la récupération des jointures externes](https://docs.jboss.org/hibernate/orm/5.3/javadocs/faq/FAQ.html#ch02s01)
  • [Explication de Gavin King sur les jointures externes SQL et le comportement d'Hibernate ](http://www.hibernate.org/42.html)

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