1

我正在使用 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()为空,但 IMO 它不应该为空。这就是 Envers 每次都添加新版本的原因。

4

1 回答 1

1

这个问题实际上与event.getOldState()存在有关null

这是由于saveOrUpdateHibernate 的方法,它将 JSF 中的实体视为分离的。我现在使用merge而不是saveOrUpdateEnvers 正确地将 _MOD 字段存储为真或假。

于 2017-02-23T13:09:41.207 回答