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实体继承通用属性
网友评论