/* * Created on Feb 14, 2007 */ package cyrille.hibernate; import java.io.Serializable; import java.util.Arrays; import org.apache.log4j.Logger; import org.hibernate.EmptyInterceptor; import org.hibernate.Interceptor; import org.hibernate.SessionFactory; import org.hibernate.type.Type; import cyrille.sample.person.Person; public class AuditInterceptor extends EmptyInterceptor implements Interceptor { private final static Logger logger = Logger.getLogger(AuditInterceptor.class); private static final long serialVersionUID = 1L; SessionFactory sessionFactory; public SessionFactory getSessionFactory() { return this.sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { logger.debug("onSave(entity=" + entity + ", id=" + id + ", state=" + Arrays.asList(state) + ", propertyNames=" + Arrays.asList(propertyNames)); if (entity instanceof Person) { Person person = (Person) entity; logChange(person); } return super.onSave(entity, id, state, propertyNames, types); } @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { logger.debug("onFlushDirty(entity=" + entity + ", id=" + id + ", currentState=" + Arrays.asList(currentState) + ", previousState=" + Arrays.asList(previousState) + ", propertyNames=" + Arrays.asList(propertyNames)); if (entity instanceof Person) { Person person = (Person) entity; logChange(person); } return super.onFlushDirty(entity, id, currentState, previousState, propertyNames, types); } public void logChange(Person person) { AuditRecord auditRecord = new AuditRecord(person.toString()); this.sessionFactory.getCurrentSession().save(auditRecord); } }