Envers 4.2.x добавляет запись в таблицу AUD, даже если нет изменений
Я использую 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 должно быть не нулевым. Вот почему Энверс каждый раз добавляет новую ревизию.
1 ответ
Проблема была на самом деле связана с event.getOldState()
являющийся null
,
Это было связано с saveOrUpdate
метод Hibernate, который воспринимает сущность из JSF как обособленную. Я сейчас пользуюсь merge
вместо saveOrUpdate
и Envers правильно сохраняет поля _MOD в true или false.