親エンティティで共通カラムを扱う
JPAエンティティに対して@MappedSuperclassアノテーションが付いたクラスを継承すると、子エンティティで親エンティティのカラムを扱うことができる。
これを使って、監査カラムなどを親エンティティに実装すると、共通した処理を親エンティティに集約できる。
親クラスでに書きメソッドを追加
@PrePersist public void prePersist() { setAuditColumn("prePersist"); } @PreUpdate public void preUpdate(){ setAuditColumn("preUpdate"); }
@PrePersistはpersistメソッドを呼ぶ前に割り込みで実行される処理。同様に@PreUpdateはmergeメソッドを呼ぶ前に割り込みで実行される処理。
これらのアノテーションがついたメソッドを親エンティティに実装することで、子エンティティのメソッドに対して割り込み処理を実現できる。
DAOのソース
public void whoTest(){ ChildTr c = new ChildTr(); c.setId((long)10); em.persist(c); em.flush(); c = new XXPoCJpaTestMainTr(); c.setId((long)1); em.merge(c); em.flush(); }
親エンティティ―クラス全体
@MappedSuperclass public class SuperTr implements Serializable{ @Column @PlsqlObjectAttribute(name = "AUDITCOLUMN") private String auditColumn; @PrePersist public void prePersist() { setAuditColumn("prePersist"); } @PreUpdate public void preUpdate(){ setAuditColumn("preUpdate"); } public void setAuditColumn(String s){ column10 = s; } }
参考URL
http://d.hatena.ne.jp/tokuryo/20061022/1161517391
http://d.hatena.ne.jp/taedium/20051016/p1