我将Hibernate与Envers一起使用,并且有一个实体,其中一些列用@Audited(withModifiedFlag = true)
注释,即_AUD表中有一个额外的布尔列,用于指示列是否已更新。
如果我保存一个新实体,则在_AUD表中写入相应的条目,其中revtype为0.我的_MOD列值存在问题。如果列为null,则_MOD条目的值为false,如果存在非null值,则_MOD条目为true。我认为对于一个新条目(即revtype = 0),将所有 _MOD值设置为false更合乎逻辑,因为列尚未被修改。有没有办法实现这个目标?
答案 0 :(得分:0)
最初为最初插入的值设置_MOD
个字段的主要原因是因为所有先前的实体状态都是 null ,并且这些比较会产生差异(例如,非空!= null)因此被视为已被修改。该功能未考虑正在执行的操作是INSERT
,UPDATE
还是DELETE
。
就个人而言,我发现当前的行为更合乎逻辑。
对于该初始ADD
操作,更改行为将强制您使用某些分支逻辑来处理种子值更改,这些更改基于修订版本的修订版本号,其中只需使用今天的_MOD
字段行为意味着您可以简单地忽略修订类型/编号,只需在任何查询中使用切换。
很遗憾,您目前无法切换此行为。
我们可以考虑添加一个配置参数,以便您可以影响是否应将ADD
操作视为修改。如果您和其他人觉得有用,请随时打开JIRA here。