package se.sperber.cryson.examples.advancedcrysondiary.interceptor; import org.hibernate.EmptyInterceptor; import org.hibernate.type.Type; import org.springframework.stereotype.Component; import se.sperber.cryson.examples.advancedcrysondiary.model.BaseEntity; import java.io.Serializable; import java.util.Arrays; import java.util.Date; @Component public class TimestampsInterceptor extends EmptyInterceptor { @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { if (entity instanceof BaseEntity) { setValue(currentState, propertyNames, "updatedAt", new Date()); return true; } return false; } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { if (entity instanceof BaseEntity) { setValue(state, propertyNames, "createdAt", new Date()); setValue(state, propertyNames, "updatedAt", new Date()); return true; } return false; } private void setValue(Object[] state, String[] propertyNames, String propertyToSet, Object value) { int index = Arrays.asList(propertyNames).indexOf(propertyToSet); if (index >= 0) { state[index] = value; } } }