2017-01-17 1 views
1

I Hibernate Envers in meinem Springboot Projekt konfiguriert haben, und jetzt ist es jede Änderung in den Entitäten Spar ich mit @Audited kommentierte, aber ich habe einen Zweifel.Erhalten ursprünglichen Werte von Unternehmen mit Hibernate Envers

Envers speichert die Revision der Entität nach die erste Änderung ist getan, nach einer Änderung habe ich die neuen Werte in der Entitätstabelle und in der Tabelle _AUD gespeichert. Die nächsten Änderungen werden in der _AUD-Tabelle gespeichert, so dass ich weiß, was sich nach der ersten Aktualisierung geändert hat, aber die ursprünglichen Werte (die vor die erste Änderung) sind verloren. Fehle ich etwas? Gibt es eine Möglichkeit, die Werte vor die Änderung zu speichern (wie ich bereits die letzten Werte in der Entitätstabelle habe) ?.

+1

Haben Sie eine Zeile in Ihrer _AUD Tabelle mit einem 'REVTYPE = 0' oder sind alle entweder' REVTYPE = 1' oder 'REVTYPE = 2'? – Naros

+0

@Naros Es gibt nur 1s und 2s, also ... es sieht so aus, als ob Envers die Erstellung von Auditing nicht überprüft, könnte es sein? –

+0

Ja. Wie wird der Datensatz in die Tabelle eingefügt, um zu starten? Ist der Datensatz eine Entität, die zufällig in einer Sammlung verwaltet wird? – Naros

Antwort

2

Es gibt drei verschiedene Revisionstypen von Envers verfolgt:

  • ADD (REVTYPE = 0) - INSERT
  • MOD (REVTYPE = 1) - UPDATE
  • DEL (REVTYPE = 2) - DELETE

Dies bedeutet, dass, wenn die Einträge eingefügt werden, aktualisiert und durch Hibernate über eine Stateful-Sitzung gelöscht, diese Änderungen pickup Envers wird und fügen Sie den entsprechenden REVTYPE Eintritt in die Audit-Tabelle.

Wenn ein Eintrag außerhalb des Bereichs der statusbehafteten Sitzung von Hibernate bearbeitet wird, wird Envers über diese Änderung nicht informiert, und der entsprechende Eintrag wird nicht zur Überwachungstabelle hinzugefügt. Aufgrund der Kommentare sehen Sie deshalb keinen REVTYPE=0 (aka INSERT) Vorgang.

In solchen Situationen müssen Sie sicherstellen, dass Sie die Revisionsnummernsequenz erhöhen und die entsprechenden Einträge manuell über das Skript oder den Batch-Prozess hinzufügen, um sicherzustellen, dass das Envers-Schema die Zeile enthält vollständige Sichtbarkeit der Geschichte der Entität.

Verwandte Themen