创建者,更新者列不能为空 spring jpa 错误

Created by , Updated by column cannot be null spring jpa error

我正在使用 spring boot 和 jpa,我想在 table 中保存数据。 我在 createdByupdatedByupdationDatecreatingDate 列上有数据库 table 约束不为空。

我有与实体类似的 DTO,上面提到的审计字段不在 DTO 中,而只在实体中,这意味着用户不发送审计信息。

在实体上我正在使用这个 @EntityListeners(AuditingEntityListener.class)

Problem is 当我尝试通过 rep.save(entity) 更新实体时出现此错误 "Column 'CreatedBy' cannot be null

我的实体正在使用审计实体侦听器,它看起来与此类似

    @Column(name = "isactive")
    private boolean active;
    @CreatedBy
    @Column(name = "createdby")
    private String createdBy;
    @CreatedDate
    @Column(name = "creationdate")
    private Instant creationDate;
    @LastModifiedBy
    @Column(name = "lastupdateby")
    private String lastUpdateBy;
    @LastModifiedDate
    @Column(name = "lastupdatedate")
    private Instant lastUpdateDate;

注意:如果我尝试创建新对象,它会被保存并正常工作,并且数据库中的审计信息(如更新者创建的审计信息)也会使用审计实体侦听器填充。 但是当它尝试更新同一个对象时,我得到 createdBy 不能为空的错误,我假设这些审计字段 createdBy updatedBy .... 也应该填充或填充auditEntityListener 与我通过 post 请求创建它的方式相同。

看看如何在 link

中使用 Audit Aware

我得到了解决方案,当我们需要更新正在使用 AuditEntityListener 的实体时 与 DTO 相比,我只更新了实体中更改的字段。 MapStruct 让一切变得简单

void updateEntity(@MappingTarget Entity target, DTO dto); 现在保存更新后的实体。

您可以使用 updatable = false 标志,例如

@Column(name = "createdby", updatable = false)

@Column(name = "creationdate", updatable = false)

帮助我解决了这个问题。