Dalam kod yang disediakan, kunci komposit ditakrifkan untuk jadual Masa dengan levelStation dan confPathID sebagai komponennya. Untuk memetakan kunci komposit ini dalam JPA dan Hibernate, anda mempunyai dua pilihan: @EmbeddedId dan @IdClass.
Anotasi @IdClass membolehkan anda memetakan berbilang medan entiti untuk membentuk kunci primer komposit. Ini memerlukan penentuan kelas yang mewakili kunci utama. Dalam kes ini, kelas TimePK boleh ditakrifkan seperti berikut:
@IdClass(TimePK.class) public class Time implements Serializable { // ... }
Di sini, TimePK ialah kelas berasingan yang mesti menentukan pembina no-arg, getter/setters untuk medan kunci utama dan sama dengan( ) dan kaedah hashCode().
The Anotasi @EmbeddedId memetakan kelas terbenam kepada kunci utama entiti. Berbanding dengan @IdClass, pendekatan ini menggabungkan kelas entiti dan kelas kunci utama. Begini cara anda menggunakan @EmbeddedId:
@Entity class Time implements Serializable { @EmbeddedId private TimePK timePK; // ... }
Dalam kes ini, TimePK ialah kelas dalaman entiti Time dan mesti juga mentakrifkan pembina no-arg, getter/setters untuk medan utama dan sama () dan kaedah hashCode().
Perbezaan utama antara @IdClass dan @EmbeddedId ialah kesannya pada sintaks pertanyaan. Dengan @IdClass, anda akan mengakses medan kunci utama secara langsung melalui entiti, manakala dengan @EmbeddedId, anda akan mengaksesnya melalui pengambil pada kelas terbenam.
Apabila memilih antara keduanya, @EmbeddedId menyampaikan fakta bahawa kunci utama mempunyai identiti yang bermakna dalam model domain anda, manakala @IdClass mencadangkan bahawa kunci utama hanyalah gabungan medan yang mengenal pasti secara unik entiti.
Spesifikasi JPA 1.0:
Atas ialah kandungan terperinci Bagaimana untuk Memetakan Kunci Komposit dalam JPA dan Hibernate menggunakan @EmbeddedId vs. @IdClass?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!