Saya menganggap itu @EmbeddedId
mungkin lebih verbose karena dengan @IdClass
Anda tidak dapat mengakses seluruh objek kunci utama menggunakan operator akses bidang apa pun. Menggunakan @EmbeddedId
Anda dapat melakukannya seperti ini:
@Embeddable class EmployeeId { name, dataOfBirth }
@Entity class Employee {
@EmbeddedId EmployeeId employeeId;
...
}
Ini memberikan gagasan yang jelas tentang bidang yang membuat kunci komposit karena semuanya dikumpulkan dalam kelas yang diakses melalui operator akses lapangan.
Perbedaan lain dengan @IdClass
dan @EmbeddedId
adalah ketika menulis HQL:
Dengan @IdClass
Anda menulis:
pilih e.name dari Karyawan e
dan dengan @EmbeddedId
Anda harus menulis:
pilih e.employeeId.name dari Karyawan e
Anda harus menulis lebih banyak teks untuk kueri yang sama. Beberapa orang mungkin berpendapat bahwa ini berbeda dari bahasa yang lebih alami seperti yang dipromosikan oleh IdClass
. Tetapi sebagian besar waktu memahami langsung dari permintaan bahwa bidang yang diberikan adalah bagian dari kunci komposit adalah bantuan yang sangat berharga.
@IdClass
walaupun saya lebih suka@EmbeddedId
dalam kebanyakan situasi (Mengetahui hal ini dari sesi oleh Antonio Goncalves. Apa yang dia sarankan adalah kita dapat menggunakan@IdClass
dalam kasus komposit kelas kunci tidak dapat diakses atau datang dari modul lain atau kode warisan di mana kita tidak dapat menambahkan anotasi. Dalam skenario itu@IdClass
akan memberi kita cara kita.