美文网首页瘪嘴程序员
JPA Auditing(JPA 审计) | 修改数据时自动添加

JPA Auditing(JPA 审计) | 修改数据时自动添加

作者: 5ebe383afd3a | 来源:发表于2018-06-15 15:32 被阅读122次

适用场景

需要对数据的创建人、创建时间、最后修改时间、最后修改人进行记录

实现目标

不破坏原有操作习惯,实现插入,修改时自动记录

先决条件

1.spring boot项目
2.使用spring data jpa 持久化管理

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

spring data jpa@auditing

解决方案

1.创建基类

该类包含了记录需要的字段,用于需要做记录的子类继承。

/**
 * 审计基类
 */
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseDO {

    @CreatedDate
    @Column
    private Date createdDate;

    @CreatedBy
    @Column
    private String createdBy;

    @LastModifiedBy
    @Column
    private String lastModifiedBy;

    @LastModifiedDate
    @Column
    private Date lastModifiedDate;
}

注释含义:

  • @MappedSuperclass |JPA用于继承的映射父类(用于Entity继承,不会在数据库生成表)
  • @EntityListeners |Entity 监听器,管理Entitty生命周期
  • @Column |JPA字段映射
  • @CreatedDate |创建时间
  • @CreatedBy |创建人
  • @LastModifiedBy |最后修改人
  • @LastModifiedDate |最后修改时间

2.审计配置

启用JPAAuditing,配置用户获得方式。

/**
 * 审计配置
 */
@Configuration
@EnableJpaAuditing
public class ModeConfig {

    @Bean
    public AuditorAware<String> auditorProvider() {
        return () -> {
            try {// Optional.ofNullable(<登录用户名>) ---设置用户获取方式
                return Optional.ofNullable(SecurityUtils.getSubject().getPrincipal().toString());
            } catch (Exception e) {//保证获取用户异常时程序的正常运行。
                return Optional.empty();
            }
        };
    }

}

3.继承基类

需要记录的实体,继承配置好的基类即可

@Entity
class MyDO extends BaseDO {}

相关文章

网友评论

    本文标题:JPA Auditing(JPA 审计) | 修改数据时自动添加

    本文链接:https://www.haomeiwen.com/subject/ghyyeftx.html