Я сделал это с помощью Interceptor (создаю свой собственный на основе EmptyInterceptor ). Мне удалось получить все изменения (объединить, сохранить, saveOrUpdate и удалить) в onFlushDirty ().
Методы EmptyInterceptor Я использовал:
@Override
public boolean onFlushDirty(Object object, Serializable id,
Object[] newValues, Object[] oldValues, String[] properties,
Type[] types) throws CallbackException {
@Override
public boolean onSave(Object object, Serializable id, Object[] newValues,
String[] properties, Type[] types) throws CallbackException {
@Override
public void onDelete(Object object, Serializable id, Object[] newValues,
String[] properties, Type[] types) throws CallbackException {
В onFlushDirty () мне нужно было запросить предыдущее состояние объекта:
Connection c = sessionFactory.getCurrentSession().connection();
Session session = sessionFactory.openSession(c);
BaseEntity newBaseEntity = (BaseEntity) object;
BaseEntity oldBaseEntity = (BaseEntity) session.get(newBaseEntity.getClass(), newBaseEntity.getId());