我正在使用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每次都添加新版本的原因。
答案 0 :(得分:1)
问题实际上与event.getOldState()
null
相关。
这是由于Hibernate的saveOrUpdate
方法,它将JSF中的实体视为分离的。
我现在使用merge
而不是saveOrUpdate
,并且Envers正确地将_MOD字段存储为true或false。