SpringBoot Jpa实体继承通用属性

一、前言

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

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

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

二、通用父类

通用主键和逻辑删除状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
* 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;
}

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

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

通用创建、修改信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* 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自定义注解

本文地址: https://github.com/maxzhao-it/blog/post/30217/