Hibernate Envers无法删除实体

问题描述 投票:0回答:1

我现在确实有一个奇怪的问题。

我只想删除一个实体。

我也在使用Hibernate envers进行审计。所以现在我想删除该实体。

现在我收到以下消息。

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:列“成功”不能为空

所以当我突然从表中删除@Audit时,我能够删除该实体。

现在,我进入我的entity_aud表,并取消选择NOT NULL以使属性成功。然后,我再次将@Audit放在桌子上方。

现在可以了。因此,为什么我只想删除一个实体,但在使用Hibernate Envers时却收到NOT NULL错误。

这是什么原因。

jpa hibernate-envers
1个回答
0
投票

[删除实体后,Envers还将为该操作生成审核条目。默认情况下,在生成删除审核记录时不捕获实体数据,因此本质上Envers尝试在包含Primary KeyRevision NumberRevision Type]的审核表中插入一行。所有其他列将插入空值。

由于您的审核表将成功列指定为NOT NULL,所以删除将引发异常。

由于这个原因,除了审核表中的主键,修订和修订类型列之外,所有其他列均应使用NOT NULL规范创建。如果您可以重现不符合此要求的Envers生成表,请通过将实体模型附加到问题上,将其报告为bug。

[配置设置,当org.hibernate.envers.store_data_at_delete设置为true时,将告诉Envers不仅捕获实体的主键,修订和修订类型,而且还捕获所有审核的列。默认情况下不启用此功能,因为通常,先前的版本会保持相同的状态,因此复制它实际上是不必要的。但是,某些用户更喜欢使用它。

© www.soinside.com 2019 - 2024. All rights reserved.