Rumah > Java > javaTutorial > Mengapa Kriteria Hibernate Mengembalikan Pesanan Pendua dengan FetchType.EAGER?

Mengapa Kriteria Hibernate Mengembalikan Pesanan Pendua dengan FetchType.EAGER?

Barbara Streisand
Lepaskan: 2024-10-26 01:40:28
asal
745 orang telah melayarinya

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

Kriteria Hibernate Mengembalikan Pesanan Pendua dengan FetchType.EAGER

Pertimbangkan pemetaan Hibernate berikut:

@OneToMany(targetEntity = OrderTransaction.class, cascade = CascadeType.ALL)
public List<OrderTransaction> getOrderTransactions() {
    return orderTransactions;
}
Salin selepas log masuk

Dengan ini pemetaan, anda boleh menapis pesanan menggunakan medan OrderStatus mereka:

public List<Order> getOrderForProduct(OrderFilter orderFilter) {
    Criteria criteria = getHibernateSession()
            .createCriteria(Order.class)
            .add(Restrictions.in("orderStatus", orderFilter.getStatusesToShow()));
    return criteria.list();
}
Salin selepas log masuk

Walau bagaimanapun, apabila jenis pengambilan ditetapkan secara eksplisit kepada EAGER, senarai yang terhasil mengandungi pesanan pendua.

Sebab untuk Pendua

Dengan FetchType.EAGER, Hibernate melakukan operasi gabungan untuk mengambil Transaksi Pesanan yang berkaitan. Akibatnya, setiap Pesanan dalam senarai yang terhasil akan diduakan untuk setiap Urus Niaga Pesanan yang berkaitan. Ini ialah gelagat yang dijangkakan dalam senario ini.

Mencapai Keputusan Yang Cemerlang

Untuk mendapatkan pesanan yang berbeza walaupun mengambil yang tidak sabar-sabar, anda boleh menggunakan kod berikut dalam pertanyaan Kriteria anda:

Criteria criteria = getHibernateSession()
            .createCriteria(Order.class, "o")
            .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
Salin selepas log masuk

Sumber Tambahan

Untuk mendapatkan maklumat lanjut tentang tingkah laku ini, rujuk sumber berikut:

  • [Soalan Lazim Hibernate on Distinct Keputusan untuk Pengambilan Sertaan Luar](https://docs.jboss.org/hibernate/orm/5.3/javadocs/faq/FAQ.html#ch02s01)
  • [Penjelasan Gavin King tentang SQL Outer Joins dan Gelagat Hibernate ](http://www.hibernate.org/42.html)

Atas ialah kandungan terperinci Mengapa Kriteria Hibernate Mengembalikan Pesanan Pendua dengan FetchType.EAGER?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan