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 中建立可重複使用類別層次結構的強大工具。在上面的範例中,我們設法集中了車輛中的公共屬性,同時保持了汽車和摩托車實體的靈活性和獨立性。這種方法促進了更清晰、更模組化的設計,特別是在具有共享相似特徵的多個實體的系統中。
以上是理解 JPA 中的 @MappedSuperclass的詳細內容。更多資訊請關注PHP中文網其他相關文章!