I am trying to use a SessionEventListener to monitor what has changed in a transaction (entities persisted, updated, removed) in order to perform post-transaction processing in my application. The problem I am encountering is that the UnitOfWorkChangeSet associated with the SessionEvent’s UnitOfWork is always null. I have tried accessing the UnitOfWorkChangeSet object in a number of different postXXX methods in my listener implementation but always with the same null result. An example of the logic is shown below:
public void postCommitTransaction(SessionEvent event) {
UnitOfWork uow = event.getSession().acquireUnitOfWork();
UnitOfWorkChangeSet changeSet = uow.getUnitOfWorkChangeSet();
If (changeSet != null) System.out.println(changeSet);
}
I have tried adding my SessionEventListener directly to the newly created EntityManager
EntityManager em = entityManagerFactory.createEntityManager(props);
((JpaEntityManager)em.getDelegate()).getSession().getEventManager().addListener(new MyEventListener());
Or via a SessionCustomizer …
Public void customize(Session session) throws Exception {
Session.getEventManager().addListener(new MyEventListener());
Any help or suggestions would be greatly appreciated.
Dennis