美文网首页JavaSpringBoot
SpringBoot Jpa实体继承通用属性

SpringBoot Jpa实体继承通用属性

作者: maxzhao_ | 来源:发表于2019-08-16 15:01 被阅读29次
    title: SpringBoot Jpa实体继承通用属性
    date: 2019-06-27
    author: maxzhao
    tags:
      - JAVA
      - SpringBoot
      - JPA
      - Entity
    categories:
      - SpringBoot
      - JPA
      - JAVA
    

    一、前言

    由于项目中的表结构有很多复用的字段,比如创建时间、删除状态、主键等等,也是为个数据设计规范,我们把项目中的 实体(entity)默认都是继承一个父类(包含这些公共的属性)。

    所以我们这里要简单的实现这个父类。

    在项目中一般没有物理删除,为了实现逻辑删除,一般会自己实现RepositoryFactoryBean 和 Repository。但是由于多个团队开发,表的结构没有统一,会出现有的表没有基础父类对应的字段,这样就会导致自定义的 jpa repository 操作这些表就会出错。
      @MappedSuperclass 注解是重点!

    二、通用父类

    通用主键和逻辑删除状态

    /**
     * BaseEntity
     * 实体继承映射类基础,保存实体的通用属性
     *
     * @author maxzhao
     * @date 2019-08-15 09:39
     */
    @Data
    @Accessors(chain = true)
    @MappedSuperclass//实体继承映射
    public class BaseEntity implements Serializable {
        @Id
        @Column(name = "ID")
        @ApiModelProperty(value = "主键")
        private Long id;
    
        @Basic
        @Column(name = "DEL_STATUS")
        @ApiModelProperty(value = "状态 1启用 0 停用")
        private Integer delStatus;
    }
    
    

    只要是实体继承当前类,就可以实现通用的主键和逻辑删除状态了。

    当然了,我们还可以继续继承,进行实体规范。

    通用创建、修改信息

    /**
     * BaseEntityId
     * 实体集成映射类,保存实体的通用属性
     *
     * @author maxzhao
     * @date 2019-08-15 09:39
     */
    @Data
    @Accessors(chain = true)
    @MappedSuperclass//实体集成映射
    public class BaseEntityId extends BaseEntity {
        @Basic
        @Column(name = "CREATE_ID")
        @ApiModelProperty(value = "创建人主键")
        private Long createId;
    
        @Basic
        @Column(name = "CREATE_IP")
        @ApiModelProperty(value = "创建IP")
        private String createIp;
    
    
        @Basic
        @Column(name = "CREATE_DATE")
        @ApiModelProperty(value = "创建时间")
        private Timestamp createDate;
    
        @Basic
        @Column(name = "UPDATE_DATE")
        @ApiModelProperty(value = "修改时间")
        private Timestamp updateDate;
    
        @Basic
        @Column(name = "UPDATE_ID")
        @ApiModelProperty(value = "修改人主键")
        private Long updateId;
    
        @Basic
        @Column(name = "UPDATE_IP")
        @ApiModelProperty(value = "修改IP")
        private String updateIp;
    }
    

    自此,通用实体属性规范父类就完成了,我们还可以定义主键策略和验证,这里就不列举了。

    本文地址:
    SpringBoot Jpa实体继承通用属性

    推荐
    IDEA好用的插件
    JAVA自定义注解

    相关文章

      网友评论

        本文标题:SpringBoot Jpa实体继承通用属性

        本文链接:https://www.haomeiwen.com/subject/oxxqsctx.html