一、前言
由于项目中的表结构有很多复用的字段,比如创建时间、删除状态、主键等等,也是为个数据设计规范,我们把项目中的 实体(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
|
@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
|
@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/