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

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

Barbara Streisand
Freigeben: 2024-10-26 01:40:28
Original
760 Leute haben es durchsucht

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

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

Berücksichtigen Sie die folgende Hibernate-Zuordnung:

@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Nach dem Login kopieren

Damit Zuordnung können Sie Bestellungen anhand ihres orderStatus-Felds filtern:

public List<Order> getOrderForProduct(OrderFilter orderFilter) {
    Criteria criteria = getHibernateSession()
            .createCriteria(Order.class)
            .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
    return criteria.list();
}
Nach dem Login kopieren

Wenn der Abruftyp jedoch explizit auf EAGER festgelegt ist, enthält die resultierende Liste doppelte Bestellungen.

Der Grund für Duplikate

Mit FetchType.EAGER führt Hibernate eine Join-Operation durch, um die zugehörigen OrderTransactions eifrig abzurufen. Infolgedessen wird jede Bestellung in der resultierenden Liste für jede zugehörige OrderTransaction dupliziert. Dies ist das erwartete Verhalten in diesem Szenario.

Eindeutige Ergebnisse erzielen

Um trotz des Eager Fetching eindeutige Bestellungen zu erhalten, können Sie den folgenden Code in Ihrer Kriterienabfrage verwenden:

Criteria criteria = getHibernateSession()
            .createCriteria(Order.class, "o")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Nach dem Login kopieren

Zusätzliche Ressourcen

Weitere Erkenntnisse zu diesem Verhalten finden Sie in den folgenden Ressourcen:

  • [Hibernate-FAQ zu Distinct Ergebnisse für das Abrufen von Outer Joins](https://docs.jboss.org/hibernate/orm/5.3/javadocs/faq/FAQ.html#ch02s01)
  • [Gavin Kings Erklärung zu SQL Outer Joins und dem Verhalten im Ruhezustand ](http://www.hibernate.org/42.html)

Das obige ist der detaillierte Inhalt vonWarum geben Hibernate-Kriterien doppelte Bestellungen mit FetchType.EAGER 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