我在 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/