即使没有更改,Envers 4.2.x也会向AUD表添加记录

时间:2017-02-22 14:25:30

标签: hibernate hibernate-envers post-update

我正在使用Hibernate Envers 4.2.21.FINAL。因为我只想跟踪一些属性'更改,我添加了注释

@Audited(withModifiedFlag = true)

他们。标志栏" propname_MOD"是否正确创建,但问题是当我保存对象时,所有MOD标志都设置为true,而不仅仅是我修改的属性。 有谁知道如何解决这个问题?

更新 我注意到班级org.hibernate.envers.event.EnversPostUpdateEventListenerImpl, 当实例化以下对象时

AuditWorkUnit workUnit = new ModWorkUnit(
    event.getSession(),event.getPersister().getEntityName(),getAuditConfiguration(),
    event.getId(),event.getPersister(),newDbState,event.getOldState() );

event.getOldState()为null,但IMO应该不为null。这就是Envers每次都添加新版本的原因。

1 个答案:

答案 0 :(得分:1)

问题实际上与event.getOldState() null相关。

这是由于Hibernate的saveOrUpdate方法,它将JSF中的实体视为分离的。 我现在使用merge而不是saveOrUpdate,并且Envers正确地将_MOD字段存储为true或false。