2014-07-24 56 views
2

我有多個表,UPDATE_TIME和INSERT_TIME列必須由應用程序代碼管理。有沒有辦法避免在每個實體類中重複列定義和行爲?具體而言,我想以某種方式考慮列定義和@ PrePersist/@ PreUpdate方法。如何在許多實體中重複JPA列定義?

@Entity 
@Table(name="THINGS") 
public class Thing { 
    // ... other columns ... 
    @Column(name = "INSERT_TIME") 
    private Date insertTime; 

    @Column(name = "UPDATE_TIME") 
    private Date updateTime; 

    @PrePersist 
    protected void onCreate() { 
    insertTime = new Date(); 
    } 

    @PreUpdate 
    protected void onUpdate() { 
    updateTime = new Date(); 
    } 
} 
+0

您是否嘗試使用[@MappedSuperclass](http://docs.oracle.com/javaee/7/api/)?然後你只要讓你的Thing類繼承MappedSuperclass。每個JPA文檔的 – Unda

回答

2

使用@MappedSuperclass(CF here):

@MappedSuperclass 
public class CommonThing { 
    @Column(name = "INSERT_TIME") 
    private Date insertTime; 

    @Column(name = "UPDATE_TIME") 
    private Date updateTime; 

    @PrePersist 
    protected void onCreate() { 
    insertTime = new Date(); 
    } 

    @PreUpdate 
    protected void onUpdate() { 
    updateTime = new Date(); 
    } 
} 

然後:

@Entity 
public class Thing extends CommonThing { 
    // Other columns. 
} 

從文檔API,@MappedSuperclass還處理註釋,比如@PrePersist

1

我不是100%肯定生命週期的方法將工作,但你可以嘗試使用Embeddable S:

@Embeddable 
public class Trace { 

    @Column(name = "INSERT_TIME") 
    private Date insertTime; 

    @Column(name = "UPDATE_TIME") 
    private Date updateTime; 

    @PrePersist 
    protected void onCreate() { 
     insertTime = new Date(); 
    } 

    @PreUpdate 
    protected void onUpdate() { 
     updateTime = new Date(); 
    } 
} 

@Entity 
public class Thing { 
    @Embedded 
    private Trace trace; 
    //more stuff 
} 

@Entity 
public class OtherThing { 
    @Embedded 
    private Trace trace; 
    //other stuff 
} 

這樣,您就不用多介紹一個單獨的超爲您的entites 。對應於使用此embeddable的任何Entitytable需要具有定義的列INSERT_TIMEUPDATE_TIME。如果需要,您可以使用@AttributeOverride覆蓋這些列名稱。

+0

,這是「不適用於所有提供者」。實際上只有Hibernate。 –

+0

好吧,最安全的方法就是將生命週期方法放置在嵌入了'Trace' .. – Tobb

+0

的類中,使我重新開始 - 重複代碼。你的解決方案很好,因爲Hibernate實際上是唯一的JPA提供者。 –

相關問題