JPA (Java Persistence API) 提供了幾個用於將 Java 類別對應到資料庫表的註解。一個這樣有用的註解是@MappedSuperclass,它用來指定一個類,其屬性必須由其他實體類別繼承,但它本身不是實體。讓我們透過涉及 Vehicle、Car 和 Motorcycle 等類的實際範例來探討此註釋的有用性。
什麼是@MappedSuperclass?
@MappedSuperclass 註解用來指示一個類別不應該是一個獨立的實體,但它的屬性應該被當作實體的其他類別繼承。當您想要在多個實體之間共用公共屬性而不為基類建立單獨的表時,這非常有用。
主要特點:
實際範例
讓我們建立一個包含 Vehicle、Car 和 Motorcycle 類別層次結構的範例,其中 Vehicle 是超類別。
1。基類:車輛
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.子類:汽車
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "carro") public class Carro extends Veiculo { private int quantidadePortas; // Getters e Setters }
3.子類:摩托車
import javax.persistence.Entity; import javax.persistence.Table; @Entity @Table(name = "motocicleta") public class Motocicleta extends Veiculo { private boolean temSidecar; // Getters e Setters }
表格映射
透過上述類,JPA 將在資料庫中建立以下表:
Vehicle 表在資料庫中不存在,因為 Vehicle 類別只是一個超類,而不是實體。
使用的好處@MappedSuperclass
注意事項
如果您希望超類別也是一個實體(例如用於直接查詢),請使用@Inheritance繼承策略而不是@MappedSuperclass。
@MappedSuperclass 非常適合基底類別不需要作為單一實體持久化,但其屬性與多個實體相關的情況。
結論
@MappedSuperclass 註解是在 JPA 中建立可重複使用類別層次結構的強大工具。在上面的範例中,我們設法集中了車輛中的公共屬性,同時保持了汽車和摩托車實體的靈活性和獨立性。這種方法促進了更清潔、更模組化的設計,特別是在具有共享相似特徵的多個實體的系統中。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3