JavaSpringBoot

SpringBoot Jpa实体继承通用属性

2019-08-16  本文已影响29人  maxzhao_
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自定义注解

上一篇 下一篇

猜你喜欢

热点阅读