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中文网其他相关文章!