Pertanyaan Membuat hibernate tidak termasuk kolom dari tabel yang tergabung dalam klausa pilih


Saya mengalami masalah kinerja dalam SQL saya menggunakan Hibernate's DetachedCriteria. Saya memiliki beberapa hubungan banyak-ke-satu dan ketika Hibernate menghasilkan SQL itu termasuk semua bidang dari tabel yang tergabung dalam FROM. Ketika ini terjadi, itu mengambil MySQL lama untuk menjalankan query (yang juga memiliki perintah oleh dan sub query menambah masalah). Untuk 50k catatan saya saat ini ~ 6sec. Ketika saya menghapus bidang yang tidak perlu di SELECT untuk hanya objek domain yang saya khawatirkan, itu berjalan dengan baik di bawah 500ms.

Apakah ada cara saya dapat memberi tahu Hibernate untuk tidak menyertakan bidang dari gabungan?

Saya sudah mencoba pengaturan parameter fetch dalam file pemetaan untuk 'bergabung' dan 'pilih' dan tidak ada perbedaan dalam SQL yang dihasilkan.

Saya juga mencoba mengatur entri root yang berbeda, tetapi dari apa yang saya baca, itu tidak bekerja dengan paging (yang juga saya lakukan).

Saya bisa mencoba dan menulis query sebagai HQL tetapi dengan sub query itu hanya membuatnya lebih sakit kepala.


4
2018-02-10 19:52


asal


Jawaban:


Anda dapat menetapkan Proyeksi yang berisi daftar hanya properti yang Anda minati.

Berikut ini contoh dari proyek sebelumnya:

Criteria criteria = getSession().createCriteria(Something.class);
criteria.createCriteria("user", "u");

// only retrieve the following fields: id, state, viewCount, user.username
ProjectionList properties = Projections.projectionList();
properties.add(Projections.property("id"));
properties.add(Projections.property("state"));
properties.add(Projections.property("viewCount"));
properties.add(Projections.property("u.username"));

criteria.setProjection(properties);

5
2018-02-10 21:44



Saya memiliki pertanyaan yang sama, kedengarannya aneh tidak ada cara untuk melakukan ini. Kedengarannya sebagai skenario yang cukup umum, gunakan JOIN untuk menyaring, tetapi tanpa memuat seluruh entitas terkait (ies).


1
2017-07-27 12:51



Sudahkah Anda mencoba mengatur Lazy = true untuk kelas yang tidak ingin Anda muat?


0
2018-02-11 11:11