【发布时间】:2019-11-22 07:47:17
【问题描述】:
我正在使用 spring boot 和 jpa,我想将数据保存在表中。
我在createdBy、updatedBy、updationDate、creatingDate 列上的数据库表约束不为空。
我有与实体类似的 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不能为空的错误,我假设这些审计字段createdByupdatedBy ....也应该以同样的方式填充auditEntityListener我通过发布请求创建它。
【问题讨论】:
-
添加名为 @Nullable 的注解,或 @Column 属性 nullable=true
-
我认为这里的问题是它不应该为空@SwaritAgarwal
-
@SimasJoneliunas 我猜错误状态“列'CreatedBy'不能为空。如果它可以为空,那么问题应该纠正
-
看起来您正在将
createdBy设置为null。不要那样做。 -
如果应用程序允许来宾用户创建内容,那将是正确的。但是,大多数情况下,您不希望数据库中存在孤立对象,因此在这种情况下,这可能是错误配置的主体中的错误,或者是允许 created by 为空的设计错误。
标签: java spring hibernate spring-data-jpa hibernate-mapping