JPA 实体类的继承并复用父类属性
2021-11-22 本文已影响0人
技术指北
简述
说JPA或许有些道友没太大影响,很多都喜欢用mybatis或者M-P,但一说hibernate,估计大家伙都脑子一灵光了,其实JPA底层也是hibernate的一种,操作跟hibernate基本一样,当然作为spring全家桶的一员,肯定也是做了一些特有的封装。
JPA跟hibernate一样,都可以通过建实体类来自动创建数据库的表,但是,我们日常开发中常常会有这样想法,例如A、B两张表,B表拥有A表的所有属性,这时就想数据表能各自用各自的所有字段,但实体类A独立,实体类B在继承A类后只需再附加额外的属性即可,要想实现这种效果,我需要用到jakarta.persistence-api中的@Inheritance注解。此文利用H2数据库作练习,下面看图实践:
实践
新建两个实体类,Child、Parent,并且Child简单继承Parent。
@Entity
@Table(name = "t_parent")
@Data
public class Parent {
@Id
@Column(name = "class_id")
private String classID;
@Column(name = "class_name")
private String className;
@Column(name = "class_type")
private String classType;
}
@Entity
@Table(name = "t_child")
@Data
public class Child extends Parent{
@Column
private String level;
}
启动项目看SQL打印:
只创建了t_parent,并直接使用了子类的属性;
下面给Parent实体类加上注解 @Inheritance:
效果:
ps:strategy的值一定是
InheritanceType.TABLE_PER_CLASS 哦,不然达不到效果!!!