Sebuah daftar, jika tidak ada kolom indeks yang ditentukan, hanya akan ditangani sebagai tas oleh Hibernate (tidak ada pemesanan khusus).
Satu perbedaan penting dalam penanganan Hibernate adalah Anda tidak dapat mengambil dua daftar berbeda dalam satu kueri. Misalnya, jika Anda memiliki Person
entitas yang memiliki daftar kontak dan daftar alamat, Anda tidak akan dapat menggunakan satu kueri untuk memuat orang dengan semua kontak dan semua alamatnya. Solusi dalam kasus ini adalah membuat dua kueri (yang menghindari produk kartesius), atau menggunakan a Set
alih - alih a List
untuk setidaknya salah satu koleksi.
Seringkali sulit untuk menggunakan Set dengan Hibernate ketika Anda harus menentukan equals
dan hashCode
pada entitas dan tidak memiliki kunci fungsional yang tidak dapat diubah dalam entitas.
Jika Anda menggunakan List, maka Anda dapat menentukan klausa 'Order BY' dalam fungsi pengambil. Anda tidak dapat melakukan itu dengan Set. Urutan menurut klausul dapat berisi sebagian EJBQL; Sebagai contoh
Jika Anda membiarkan bidang ini kosong, daftar diurutkan dalam urutan menaik berdasarkan nilai kunci utama.
sumber
@Sort
satu set - gunakan sajaSortedSet
seperti yang dijelaskan di dokumen .@OrderBy
padaSet
. Di bawahnya, Hibernate akan digunakanOrderedSetType
yang akan membuat instanceLinkedHashSet
, jadi ketertiban tetap terjaga. Selain itu saya akan menyarankan untuk digunakanLinkedHashSet
dalam entitas - demi konsistensi. Sumber: Discse.hibernate.org/t/…