当前位置: 首页 > 知识库问答 >
问题:

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

居琛
2023-03-14

我在spring data jdbc中使用简单的crud操作和审计。因此,当我插入新记录时,审计工作完全正常。但是当我更新我的记录时,我的createdby和createddate设置为null。有什么方法可以避免修改这些列吗?

注意:column(可更新= 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");
  }
}

共有1个答案

濮阳宁
2023-03-14

是的,据我所知这是不可能的。因为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

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

研究数据库触发器,它们将帮助您。然而,随着表中数据的增长,您将不得不承担一点延迟的代价。

 类似资料:
  • 我正在使用Spring-Boot 2.5.0和MongoDB来持久化一些文档。这里是Github项目。 对于每个文档,我还需要自动保存一些审计信息,因此我扩展了以下类: 例如。让我们考虑类: 我遇到的问题是,当我通过JSON更新文档时,我能够更改/覆盖CreatedBy和CreatedDate字段的值。 这意味着,如果未提供字段,则结果值将保存为null,否则,它将为创建者和创建的字段保存新值。

  • 我使用的是Spring数据JDBC。 我有一个实体,其中的字段用

  • 我正在使用Spring Mongo审计和@CreatedDate@CreatedBy不工作,但@LastModifiedDate和@LastModifiedBy工作正常。 我在配置类上添加了@EnableMongoAudting,并定义了AuditAware。 审核类别为: 当我保存文档时,它在createdOn和createdBy中都设置为null,但在modifiedOn和modifiedBy

  • 我使用的是spring boot,因此我没有使用任何xml文件进行配置。我要做的是,在使用MongoRepositories保存数据时,启用OngOAuditing以保存createdDate、lastModifiedDate等。 我的模特课 我使用@CreateDate注释来保存createDate。我对DateTime使用了jodatime依赖项 Spring-data-mongoDB也添加在

  • 我正在尝试将与spring-data-jdbc和PostgreSQL数据库结合使用,以跟踪首次创建表条目的时间。当插入新行时,这有效(它正确地将其设置为当前日期),但是在更新条目时,我得到异常,因为它被设置为null,这是我的配置不允许的。 这是我的实体(省略了其他不相关的字段): 这是我的存储库: 这是相关的配置: 使用方法,第一次正确设置了。当使用相同的方法更新现有实体时,当我希望跳过字段时,

  • 我正在尝试设置(作为一个java初学者)SpringJPA审计,时间为数小时/天。。。我开始感到非常沮丧,因为我找不到问题。我真的很感谢你的帮助。 @LastModifiedBy和@LastModifiedDate注释正在工作,但@CreatedBy和@CreatedDate始终为空。 下面是sql查询调试输出:2017-06-16 16:40:39[main]DEBUG n.t.d.l.l。SL