我在 spring data jdbc 中使用简单的 CRUD 操作和审计。因此,当我插入新记录时,审计工作绝对正常。但是当我更新我的记录时,我的创建者和创建日期设置为空。有什么方法可以避免修改这些列吗?
注意:spring data jdbc 不支持 column(updatable= false) 功能。
我的审计实体如下所示:
@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 https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html.
触发器基本上可以帮助您记录、观察和验证数据(数据库行)的任何更改。
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
在您的应用程序中捕获此异常并向您的客户显示错误消息。
研究数据库触发器,它们会对你有帮助。但是,随着表中数据的增长,您将不得不承担一点延迟的成本。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)