Java 创建人、更新人列不能为空spring jpa错误

Java 创建人、更新人列不能为空spring jpa错误,java,spring,hibernate,spring-data-jpa,hibernate-mapping,Java,Spring,Hibernate,Spring Data Jpa,Hibernate Mapping,我正在使用SpringBoot和jpa,我想将数据保存在表中。 我对createdBy,updatedBy,updatedate,creatingDate列的数据库表约束不为null 我的DTO和entity类似,上面提到的审计字段不在DTO中,而只在entity中,这意味着用户不发送审计信息 在实体上,我正在使用这个@EntityListeners(AuditingEntityListener.class) 问题是当我试图通过rep.save(entity)更新实体时,我得到了这个错误“Cre

我正在使用SpringBoot和jpa,我想将数据保存在表中。 我对
createdBy
updatedBy
updatedate
creatingDate
列的数据库表约束不为null

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

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

问题是
当我试图通过
rep.save(entity)
更新实体时,我得到了这个错误
“CreatedBy”列不能为空

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

    @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
…也应该填充filled by
auditEntityListener
,就像我通过post请求创建它一样。

看看如何在i中使用审计感知当我们需要更新正在使用AuditEntityListener的实体时,找到了解决方案 与DTO相比,我只更新了实体中更改的字段。 MapStruct使它变得简单

void updateEntity(@MappingTarget实体目标,DTO DTO);

现在保存更新的实体。

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

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


这帮助我解决了这个问题。

添加名为@Nullable或@Column Attribute Nullable=true的注释我认为这里的问题是它不应该为null@SwaritAgarwal@SimasJoneliunas我猜错误状态为“列'CreatedBy'不能为null”。如果它可以为null,那么问题应该像您正在将
createdBy
设置为
null
一样进行更正。若应用程序允许来宾用户创建内容,那个么这是正确的。但是,大多数情况下,您不希望数据库中存在孤立对象,因此,在本例中,它可能是配置错误的主体中的错误,或者是允许创建的对象为null的设计中的错误。
@Column(name = "creationdate", updatable = false)