JPA 实体类的继承并复用父类属性

简述

说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 哦,不然达不到效果!!!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容