我现在确实有一个奇怪的问题。
我只想删除一个实体。
我也在使用Hibernate envers进行审计。所以现在我想删除该实体。
现在我收到以下消息。
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“成功”不能为空
所以当我突然从表中删除@Audit
时,我能够删除该实体。
现在,我进入我的entity_aud表,并取消选择NOT NULL以使属性成功。然后,我再次将@Audit
放在桌子上方。
现在可以了。因此,为什么我只想删除一个实体,但在使用Hibernate Envers时却收到NOT NULL错误。
这是什么原因。
[删除实体后,Envers还将为该操作生成审核条目。默认情况下,在生成删除审核记录时不捕获实体数据,因此本质上Envers尝试在包含Primary Key,Revision Number和Revision Type]的审核表中插入一行。所有其他列将插入空值。
由于您的审核表将成功列指定为NOT NULL
,所以删除将引发异常。
由于这个原因,除了审核表中的主键,修订和修订类型列之外,所有其他列均应使用NOT NULL
规范创建。如果您可以重现不符合此要求的Envers生成表,请通过将实体模型附加到问题上,将其报告为bug。
[配置设置,当org.hibernate.envers.store_data_at_delete
设置为true
时,将告诉Envers不仅捕获实体的主键,修订和修订类型,而且还捕获所有审核的列。默认情况下不启用此功能,因为通常,先前的版本会保持相同的状态,因此复制它实际上是不必要的。但是,某些用户更喜欢使用它。