Envers 4.2.x 为 AUD 添加一条记录 table 即使没有变化
Envers 4.2.x adds a record to the AUD table even if there are no changes
我正在使用 Hibernate Envers 4.2。21.FINAL。因为我只想跟踪一些属性的变化,所以我添加了注释
@Audited(withModifiedFlag = true)
在他们身上。标志列 "propname_MOD" 已正确创建,但问题是当我保存对象时,所有 MOD 标志都设置为 true,而不仅仅是我修改的属性。
有谁知道如何解决这个问题?
更新
我注意到在 class 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 每次都添加新版本的原因。
问题实际上与 event.getOldState()
相关 null
。
这是由于 Hibernate 的 saveOrUpdate
方法造成的,它认为来自 JSF 的实体是分离的。
我现在使用 merge
而不是 saveOrUpdate
并且 Envers 正确地将 _MOD 字段存储为 true 或 false。
我正在使用 Hibernate Envers 4.2。21.FINAL。因为我只想跟踪一些属性的变化,所以我添加了注释
@Audited(withModifiedFlag = true)
在他们身上。标志列 "propname_MOD" 已正确创建,但问题是当我保存对象时,所有 MOD 标志都设置为 true,而不仅仅是我修改的属性。 有谁知道如何解决这个问题?
更新
我注意到在 class 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 每次都添加新版本的原因。
问题实际上与 event.getOldState()
相关 null
。
这是由于 Hibernate 的 saveOrUpdate
方法造成的,它认为来自 JSF 的实体是分离的。
我现在使用 merge
而不是 saveOrUpdate
并且 Envers 正确地将 _MOD 字段存储为 true 或 false。