Hibernateでcreated_at/modified_at
Interceptorを使えばよいか。
public class DatetimeInterceptor extends EmptyInterceptor { @Override public boolean onFlushDirty(Object entity, Serializable id, Object[] currentState, Object[] previousState, String[] propertyNames, Type[] types) { for (int i = 0; i < propertyNames.length; i++) { if (propertyNames[i].equals("modified")) { currentState[i] = new Date(); return true; } } return false; } @Override public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { boolean modified = false; for (int i = 0; i < propertyNames.length; i++) { if (propertyNames[i].equals("created") || propertyNames[i].equals("modified")) { state[i] = new Date(); modified = true; } } return modified; } }
で、使う時に
SessionFactory sf = new Configuration() .setInterceptor(new DatetimeInterceptor()) .configure() .buildSessionFactory();
とすれば良いっぽい
(追記)
createdの方は初回以外は更新されないのだけども、Entityにsetすれば更新可能なのでそこは気をつけないといけない。まあ、その方がどうしても更新したい場合を考えると便利だが。