2011-11-30 50 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以包含服务器的时间戳。

如果您想要返回时间戳,那么您将需要将连接表映射为实体,以便有一定的位置来存储数据。