EntityListener
タイムスタンプを設定するコードを一箇所に集中させたいという話をよく聞くのでEntityListenerを用意してみました。
@Entityにリスナークラスを設定します。
@Entity(listener = EmpListener.class) public interface Emp { ... TimestampDomain insertTimestamp(); TimestampDomain updateTimestamp(); }
設定されたリスナークラスのメソッドは更新系のSQLの前に呼ばれます。
public class EmpListener implements EntityListener<Emp> { @Override public void preDelete(Emp entity) { } @Override public void preInsert(Emp entity) { Timestamp timestamp = new Timestamp(new Date().getTime()); entity.insertTimestamp().set(timestamp); } @Override public void preUpdate(Emp entity) { Timestamp timestamp = new Timestamp(new Date().getTime()); entity.updateTimestamp().set(timestamp); } }
ちょっとした便利機能として、EntityListenerの型パラメータにエンティティクラスと互換性のない型が指定されたらaptでエラーにするようにしました。