I want to write a history component that tracks changes to a particular object type and writes history rows based on the difference. Note this is not a general audit system it is specific for one object type.
I figure I can hook into the hibernate event model and listen for events that tells me when things have changed, watch for any changes to instances of the object type I am interested in, and then have some custom code generate the history rows.
I want the history rows written in the same transaction, and ideally using hibernate (therefore using the same Session)
I have some questions/concerns
- Which hibernate events should I hook, assuming I want to trap just changes?
- How do I go about participate in the same Session/transaction as the Session that are generating the events. I have read there are issues interacting with the Session inside event handlers?
Any help appreciated.
There is a generic audit solution for hibernate entities, called envers, that should do the trick.
However, if this solution is not enough (as your comment suggests), the org.hibernate.events package defines the usable events.
In you case, I would suggest to implement at least the PostUpdateEventListener interface.