Saya menganggap itu @EmbeddedIdmungkin lebih verbose karena dengan @IdClassAnda tidak dapat mengakses seluruh objek kunci utama menggunakan operator akses bidang apa pun. Menggunakan @EmbeddedIdAnda 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 @IdClassdan @EmbeddedIdadalah ketika menulis HQL:
Dengan @IdClassAnda menulis:
pilih e.name dari Karyawan e
dan dengan @EmbeddedIdAnda 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.
@IdClasswalaupun saya lebih suka@EmbeddedIddalam kebanyakan situasi (Mengetahui hal ini dari sesi oleh Antonio Goncalves. Apa yang dia sarankan adalah kita dapat menggunakan@IdClassdalam 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@IdClassakan memberi kita cara kita.