Я проверяю ответ Паскаля как правильный ответ, так как он указал мне непосредственно на пункт в документации, которая содержит подробности и пример кода. Но для читателя я добавляю больше деталей здесь.
Я попробовал как события гибернации, так и перехватчики, и обнаружил, что перехватчик работал лучше в моей ситуации. Это было относительно легко осуществить.
Спасибо за помощь!
Ниже приведен код перехватчика:
public class AuditInterceptor extends EmptyInterceptor {
private Log log = LogFactory.getLog(this.getClass());
private int updates;
private int creates;
@Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
if (entity instanceof AuditableVO) {
creates++;
// Find the create date and change it
for (int i=0; i < propertyNames.length; i++) {
if (propertyNames[i].equals("createDate")) {
state[i] = new Date();
return true;
}
}
}
return false;
}
@Override
public boolean onFlushDirty(Object entity, Serializable id,
Object[] currentState, Object[] previousState,
String[] propertyNames, Type[] types) {
if (entity instanceof AuditableVO) {
updates++;
// Find the update date and change it
for (int i=0; i < propertyNames.length; i++) {
if (propertyNames[i].equals("updateDate")) {
currentState[i] = new Date();
return true;
}
}
}
return false;
}
@Override
public void afterTransactionCompletion(Transaction tx) {
if (tx.wasCommitted()) {
log.info("Creations: " + creates + ", Updates: " + updates);
}
creates = 0;
updates = 0;
super.afterTransactionCompletion(tx);
}
}