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