2017-02-22 1 views
1

Ich verwende Hibernate Envers 4.2.21.FINAL. Da ich nur die Änderungen einiger Eigenschaften verfolgen möchte, habe ich die AnnotationEnvers 4.2.x fügt der AUD-Tabelle einen Datensatz hinzu, auch wenn keine Änderungen vorgenommen werden

auf ihnen hinzugefügt. Die Flagspalte "propname_MOD" wird korrekt erstellt, aber das Problem besteht darin, dass beim Speichern eines Objekts alle MOD-Flags auf "true" gesetzt werden und nicht nur für das Attribut, das ich geändert habe. Kann jemand dieses Problem lösen?

UPDATE Ich bemerkte, dass org.hibernate.envers.event.EnversPostUpdateEventListenerImpl, in der Klasse , wenn das folgende Objekt

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

event.getOldState() instanziiert ist null, aber IMO sollte es nicht null sein. Aus diesem Grund fügt Envers jedes Mal eine neue Revision hinzu.

Antwort

1

Das Problem war in der Tat im Zusammenhang mit der event.getOldState(), null.

Es war aufgrund der saveOrUpdate Methode von Hibernate, die die Entität von JSF als getrennt erkennt. Ich verwende jetzt merge anstelle von saveOrUpdate und Envers speichert korrekt die _MOD Felder auf wahr oder falsch.

Verwandte Themen