创建者,更新者列不能为空 spring jpa 错误
Created by , Updated by column cannot be null spring jpa error
我正在使用 spring boot 和 jpa,我想在 table 中保存数据。
我在 createdBy
、updatedBy
、updationDate
、creatingDate
列上有数据库 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)
帮助我解决了这个问题。
我正在使用 spring boot 和 jpa,我想在 table 中保存数据。
我在 createdBy
、updatedBy
、updationDate
、creatingDate
列上有数据库 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)
帮助我解决了这个问题。