Ich habe ein Problem mit Hibernate - Envers. Ich habe ein Domänenobjekt mit nur einem geprüften Attribut status
die eine der Zahlen 0,1,2,3,4,5 sein kann.
@Entity
public class Item {
...
@Audited
private int status;
... other variables, setter/getter, ...
}
Jetzt funktioniert alles in Envers und Hibernate. Beim Erstellen eines neuen Item-Objekts und dessen Hinzufügen zur Datenbank wird eine Zeile in die Datenbank eingefügt. Item_AUD
Datenbank-Tabelle.
Aber jetzt habe ich ein Problem mit der Aktualisierung. Meine Aktualisierung in der Hibernate Dao-Implementierung sieht so aus:
public void updateItem(Item i) {
SessionFactory sessionFac = HibernateUtility.getSessionFactory();
Session s = sessionFac.getCurrentSession();
Transaction trans = s.beginTransaction();
s.update(i);
s.flush();
trans.commit();
}
Bei jeder Aktualisierung wird dies auf meiner Konsole angezeigt:
Hibernate: update Item set amount=?, description=?, status=? where id=?
Hibernate: insert into REVINFO (REVTSTMP) values (?)
Hibernate: insert into Item_AUD (REVTYPE, status, id, REV) values (?, ?, ?, ?)
Das Problem ist aber, dass ich nur eine Zeile in die Tabelle einfügen möchte. REVINFO
y Item_AUD
wenn sich die Statusnummer geändert hat!
Zum Beispiel: Ich ändere die description
des Eintrags, führen Sie die Aktualisierung mit dem Aufruf updateItem
und dann schreibt Envers eine neue Revision in die Audittabellen. Aber ich möchte dieses Verhalten nicht.
Was ich will: nur wenn der Wert von status
geändert wird, sollte Envers Datenbankeinträge in die Audittabellen schreiben.
Aber wie kann ich das tun?
Mit freundlichen Grüßen, Tim.