Spring Data JPA审计
创始人
2024-02-06 10:46:03
0

Spring Data JPA为跟踪持久性层的变化提供了很好的支持。通过使用审核,我们可以存储或记录有关实体更改的信息,例如谁创建或更改了实体以及何时进行更改。

我们可以利用实体字段上的@CreatedBy,@CreatedDate,@LastModifiedDate,@LastModifiedBy注释来指示 Spring JPA 透明地填充这些字段。我们可以按如下方式使用注释:

@Entity
public class Category {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;private Long title;@CreatedByprivate Long createdBy;@CreatedDateprivate LocalDateTime createdDate;@LastModifiedByprivate Long lastModifiedBy;@LastModifiedDateprivate LocalDateTime lastModifiedDate;// getters and setter..
}

大多数实体通常需要审计功能,因此创建和抽象包含审计字段的Auditable类并通过需要审计的实体扩展抽象类是一种更好的方法。通过这种方式,我们将避免在所有实体中重复相同的字段。

创建抽象可审计类

我们可以创建一个 Abstract 类来包含审计相关字段,如下所示:

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable {@CreatedBy@Column(columnDefinition = "bigint default 1", updatable = false)protected Long createdBy;@CreatedDate@Column(columnDefinition = "timestamp default '2020-04-10 20:47:05.967394'", updatable = false)protected LocalDateTime createdDate;@LastModifiedBy@Column(columnDefinition = "bigint default 1")protected Long lastModifiedBy;@LastModifiedDate@Column(columnDefinition = "timestamp default '2020-04-10 20:47:05.967394'")protected LocalDateTime lastModifiedDate;public Long getCreatedBy() {return createdBy;}public void setCreatedBy(Long createdBy) {this.createdBy = createdBy;}public LocalDateTime getCreatedDate() {return createdDate;}public void setCreatedDate(LocalDateTime createdDate) {this.createdDate = createdDate;}public Long getLastModifiedBy() {return lastModifiedBy;}public void setLastModifiedBy(Long lastModifiedBy) {this.lastModifiedBy = lastModifiedBy;}public LocalDateTime getLastModifiedDate() {return lastModifiedDate;}public void setLastModifiedDate(LocalDateTime lastModifiedDate) {this.lastModifiedDate = lastModifiedDate;}
}

@MappedSuperclass注解用于指定类本身不是实体,但其属性可以采用与实体相同的方式映射,但是此映射仅适用于其子类。所以每个类继承抽象类Auditable将包含这些属性。

@EntityListeners注释用于配置AuditingEntityListener其中包含方法@PrePersist和@PreUpdate,以便捕获审核信息​​​​​​​

启用审核功能

为了在 Spring 中启用审计功能,我们需要使用@EnableJpaAuditing注释。

@SpringBootApplication
@EnableJpaAuditing
public class BackendApplication {public static void main(String[] args) {SpringApplication.run(BackendApplication.class, args);}
}

提供审计师

createdDatelastModifiedDate字段根据当前时间填充。此外,createdBy​​​​​​​​​​​​​​和lastModifiedBy需要一种方法来获取正在执行操作的用户。为了提供这些信息,我们需要实现AuditorAware接口。​​​​​​​​​​​​​​

@Component
public class AuditAwareImpl implements AuditorAware  {@Overridepublic Optional  getCurrentAuditor() {ApplicationUser principal = (ApplicationUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal();return Optional.of(principal.getId());}
}

我们添加了 getCurrentAuditor的实现,因为它被调用以检索正在执行操作的用户。

扩展实体中的可审核类

现在我们可以在要使用的实体中扩展类 Auditable审计.例如:

@Entity
@Data
public class Category extends Auditable {@GeneratedValue(strategy = GenerationType.IDENTITY)@Idprivate Long id;private String title;// ..
}

审核字段将自动填充:

相关内容

热门资讯

财经不烧脑 | 信用修复政策来... 你是不是也有这样的烦恼?就一次忘了还钱,金额可能也不大,结果征信报告上“挂”了整整五年!房贷、车贷、...
涉绑架杀害中国公民 犯罪嫌疑人... 中国青年报客户端北京12月29日电(中青报·中青网记者 何春中)记者今天从公安部获悉,公安部近日派出...
恒誉环保(688309)披露关... 截至2025年12月29日收盘,恒誉环保(688309)报收于23.88元,较前一交易日上涨2.58...
一场精准的“政策捕捉” 传鼎晖... 观点网 上海苏州河畔,一幢服务式公寓悄然易主,掀开了住房租赁行业生存逻辑变革的一角。 最新消息显示,...
从制度协同到产业共振 中越合作... [ 完善“边境口岸+产业园区”联动模式,将云南221.4亿元对越贸易额的增长势能延伸至内陆,形成“边...
武进不锈(603878)披露拟... 截至2025年12月29日收盘,武进不锈(603878)报收于10.16元,较前一交易日上涨2.21...
*ST熊猫因涉嫌违反证券法律法... 证券之星消息,12月30日*ST熊猫公开信息显示,熊猫金控股份有限公司因涉嫌违反证券法律法规,信息披...
7岁男孩偷吃邻居“变态辣”外卖... 七岁男孩小雨在小区玩耍时,发现邻居小张家门口的未拆外卖无人看管,便偷偷取走食用。此前小张多次遭遇外卖...
锂矿龙头,涉嫌内幕交易罪单位犯... 12月29日晚,锂矿龙头赣锋锂业发布公告称,公司于12月29日收到宜春市公安局的移送起诉告知书,因涉...
中国铀业聘任张仲斌为总法律顾问... 12月29日,中国铀业(001280)发布公告,王辉因工作安排原因辞去公司总法律顾问职务,辞任后仍担...