Hibernate Envers修改了标志行为

时间:2017-12-01 07:55:18

标签: hibernate-envers

我将Hibernate与Envers一起使用,并且有一个实体,其中一些列用@Audited(withModifiedFlag = true)注释,即_AUD表中有一个额外的布尔列,用于指示列是否已更新。

如果我保存一个新实体,则在_AUD表中写入相应的条目,其中revtype为0.我的_MOD列值存在问题。如果列为null,则_MOD条目的值为false,如果存在非null值,则_MOD条目为true。我认为对于一个新条目(即revtype = 0),将所有 _MOD值设置为false更合乎逻辑,因为列尚未被修改。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

最初为最初插入的值设置_MOD个字段的主要原因是因为所有先前的实体状态都是 null ,并且这些比较会产生差异(例如,非空!= null)因此被视为已被修改。该功能未考虑正在执行的操作是INSERTUPDATE还是DELETE

就个人而言,我发现当前的行为更合乎逻辑。

对于该初始ADD操作,更改行为将强制您使用某些分支逻辑来处理种子值更改,这些更改基于修订版本的修订版本号,其中只需使用今天的_MOD字段行为意味着您可以简单地忽略修订类型/编号,只需在任何查询中使用切换。

很遗憾,您目前无法切换此行为。

我们可以考虑添加一个配置参数,以便您可以影响是否应将ADD操作视为修改。如果您和其他人觉得有用,请随时打开JIRA here