JPA (Java Persistence API) menyediakan beberapa anotasi untuk memetakan kelas Java ke jadual pangkalan data. Satu anotasi yang berguna ialah @MappedSuperclass, yang digunakan untuk menetapkan kelas yang sifatnya mesti diwarisi oleh kelas entiti lain, tetapi yang bukan entiti itu sendiri. Mari kita terokai kegunaan anotasi ini melalui contoh praktikal yang melibatkan kelas seperti Kenderaan, Kereta dan Motosikal.
Apakah itu @MappedSuperclass?
Anotasi @MappedSuperclass digunakan untuk menunjukkan bahawa kelas tidak seharusnya menjadi entiti bebas, tetapi atributnya harus diwarisi oleh kelas lain yang merupakan entiti. Ini berguna apabila anda ingin berkongsi atribut biasa antara berbilang entiti tanpa membuat jadual berasingan untuk kelas asas.
Ciri utama:
Contoh Praktikal
Mari kita buat contoh dengan hierarki kelas untuk Kenderaan, Kereta dan Motosikal, dengan Kenderaan ialah kelas super.
1. Kelas Asas: Kenderaan
import javax.persistence.MappedSuperclass; @MappedSuperclass public abstract class Veiculo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String marca; private String modelo; private int ano; // Getters e Setters }
2. Subkelas: Kereta
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3. Subkelas: Motosikal
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
Pemetaan Jadual
Dengan kelas di atas, JPA akan mencipta jadual berikut dalam pangkalan data:
Jadual Vehicle tidak wujud dalam pangkalan data, kerana kelas Vehicle hanyalah superclass dan bukan entiti.
Faedah menggunakan @MappedSuperclass
Pertimbangan
Jika anda mahu superclass juga menjadi entiti (cth. untuk pertanyaan langsung), gunakan strategi warisan @Inheritance dan bukannya @MappedSuperclass.
@MappedSuperclass sesuai untuk situasi di mana kelas asas tidak perlu dikekalkan sebagai entiti individu, tetapi sifatnya berkaitan dengan berbilang entiti.
Kesimpulan
Anotasi @MappedSuperclass ialah alat yang berkuasa untuk mencipta hierarki kelas boleh guna semula dalam JPA. Dalam contoh di atas, kami berjaya memusatkan atribut biasa dalam Kenderaan dan, pada masa yang sama, mengekalkan fleksibiliti dan kebebasan entiti Kereta dan Motosikal. Pendekatan ini menggalakkan reka bentuk yang lebih bersih dan lebih modular, terutamanya dalam sistem dengan berbilang entiti yang berkongsi ciri yang serupa.
Atas ialah kandungan terperinci Memahami @MappedSuperclass dalam JPA. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!