Heim  >  Artikel  >  Java  >  ## Warum geben Hibernate-Kriterien mit FetchType.EAGER doppelte Bestellungen zurück?

## Warum geben Hibernate-Kriterien mit FetchType.EAGER doppelte Bestellungen zurück?

Linda Hamilton
Linda HamiltonOriginal
2024-10-26 04:18:02428Durchsuche

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

Hibernate Criteria gibt doppelte Bestellungen mit FetchType.EAGER zurück

Frage:

Beim Festlegen der Abruftyp der orderTransactions-Liste einer Bestellung zu FetchType.EAGER, warum erscheinen die Bestellungen mehrmals in der resultierenden Liste, die mithilfe von Kriterien abgerufen wurde?

Antwort:

Dieses Verhalten ist erwartet. Mit FetchType.EAGER wird ein Join durchgeführt, um die orderTransactions eifrig abzurufen. Dies führt zu der gleichen Anzahl von Ergebnissen wie ein Standard-SQL-Join, bei dem jede Bestellung im Ergebnissatz für jede entsprechende orderTransaction vorhanden ist.

Um dies zu verstehen, betrachten Sie die generierte SQL-Anweisung:

SELECT o.*, l.* from ORDER o LEFT OUTER JOIN LINE_ITEMS l ON o.ID = l.ORDER_ID

In dieser Anweisung werden für jede Bestellung alle zugehörigen Einzelposten abgerufen, was zu mehreren Instanzen derselben Bestellung im Ergebnissatz führt.

Lösung zum Erhalten eindeutiger Ergebnisse:

Um doppelte Ergebnisse mit FetchType.EAGER herauszufiltern, können Sie einen Sammlungstyp verwenden, der die Einfügereihenfolge beibehält, z. B. LinkedHashSet:

Collection<Order> result = new LinkedHashSet( session.createCriteria(Order.class)
    .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()))
    .list() );

Das obige ist der detaillierte Inhalt von## Warum geben Hibernate-Kriterien mit FetchType.EAGER doppelte Bestellungen zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn