java - 如何使@CreatedBy和@CreatedDate在Spring数据jdbc中不可修改?

标签 java spring spring-boot spring-data spring-data-jdbc

我在 spring data jdbc 中使用简单的 CRUD 操作和审计。因此,当我插入新记录时,审计工作绝对正常。但是当我更新我的记录时,我的创建者和创建日期设置为空。有什么方法可以避免修改这些列吗?

注意:column(updatable= false) 功能不支持 spring data jdbc。

我的审计实体如下所示:

@Data // lombak
public class AuditEntity {
  @JsonIgnore
  @LastModifiedDate
  private String updatedOn;
  @JsonIgnore
  @LastModifiedBy
  private String updatedBy;
  @JsonIgnore
  @CreatedDate
  private String createdBy;
  @JsonIgnore
  @CreatedBy
  private String createdOn;

}

并使用@EnableJdbcAuditing进行配置并定义以下bean

@Bean
  AuditorAware<String> auditorAware() {
    return new CustomAuditAware();
  }

我的自定义审核感知如下所示

public class CustomAuditAware implements AuditorAware {
  @Override
  public Optional getCurrentAuditor() {
    return Optional.ofNullable(
        "System");
  }
}

最佳答案

是的,据我所知这是不可能的。由于MySQL不限制任何列中数据的更改。

但是,开发人员利用 TRIGGER .

触发器基本上可以帮助您记录、观察和验证数据(数据库行)的任何更改。

create trigger check_if_a_column_has_changed on your_table
-- before update
   pull your old column value and check if it has been changed, 
   throw error if data been changed

在您的应用程序中捕获此异常并向您的客户显示错误消息。

研究数据库触发器,它们会对你有所帮助。但是,随着表中数据的增长,您将不得不承担一点延迟的成本。

关于java - 如何使@CreatedBy和@CreatedDate在Spring数据jdbc中不可修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72306228/

相关文章:

java - 在@Embeddable 类中使用@Embedded

spring - 您如何找到绕过 Spring 代码库的方法?

java - 将 JPA Spring boot 与 SQL Server 结合使用

java - Jersey 消耗二维数组

java - 注释如何防止数组参数的突变?

Java Spring + Hibernate LocalSessionFactoryBean 不工作

java - 在Spring的Service层注入(inject)一个数据存储库

java - 检查文档是否存在于 Firestore 集合中

java - 使用jsp访问列表中的数据

java - JPQL IS NOT NULL 返回带有 NULL 的对象