2011-11-30 81 views
0

我正在尋找一種方法來擴展OneToMany關係中的兩個實體之間的自動生成的鏈接表與附加的時間戳列。JPA - 使用時間戳修改自動生成的鏈接表

目的是什麼? 每個實體本身都有一個顯示上次更改時間的時間戳。但是, 沒有辦法看到所做的更改。對於我們來說,看看地點和事件之間的分配是在什麼時間完成的。

@Entity 
public class Place{  

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 
    private final List <Event> events = new ArrayList<Event>(); 

    .... 

} 

DB包含三個表。 PLACE,EVENT和PLACE_EVENT。 表PLACE_EVENT有兩列:PLACE_ID和EVENT_ID。

我想要一個簡單的時間戳第三列「CREATED」。 有什麼辦法可以自動生成這個時間戳。我不想自己創建一個新的實體PLACE_EVENT。

我不確定這是否可能,但我很感激任何提示。

我在eclipselink和db2驅動程序中使用jpa 2.0。

+0

JPA不允許這種關聯,如果你想在關聯上有屬性,你必須**創建一個新的實體。 –

+0

哦,真可惜。但是,謝謝你的迴應。 – user1073145

回答

0

您可以自己創建表(即不依賴實體自動創建模式),並添加一個時間戳列,其默認值設置爲now()。但是要注意有時(我不記得在哪種情況下),當Hibernate向A添加一個新的實體B時,它會從連接表中刪除所有引用A的行並重新插入它們。

另請注意,timestamp字段將填充到數據庫中,但不會從Hibernate實體中獲得。只有SQL查詢才能夠訪問時間戳。

+0

謝謝,我會考慮這種可能性。 – user1073145

0

如果您只是希望在數據庫中使用觸發器,可以使用觸發器生成時間戳。 您也可以使用DescriptorCustomizer覆蓋映射的insertSQL以包含服務器的時間戳。

如果您想要返回時間戳,那麼您將需要將連接表映射爲實體,以便有一定的位置來存儲數據。