Heim > Java > javaLernprogramm > Hauptteil

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

Linda Hamilton
Freigeben: 2024-10-26 04:18:02
Original
443 Leute haben es durchsucht

## 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
Nach dem Login kopieren

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() );
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!