JPA -使用时间戳修改自动生成的链接表



我正在寻找一种方法来扩展OneToMany关系中两个实体之间自动生成的链接表,并添加一个额外的时间戳列。

目的是什么?每个实体本身都有一个时间戳,显示最后一次更改的时间。但是没有办法看看发生了什么样的变化。我们有必要知道Place和Event是在什么时候进行分配的。

@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。

您可以自己创建表(即不依赖于实体的自动模式创建),并添加一个默认值为now()的时间戳列。

但要注意,有时(我记不清具体是在什么情况下),当Hibernate向a添加一个新实体B时,它会从连接表中删除所有引用a的行,并重新插入它们。

还要注意,时间戳字段将在数据库中填充,但不能从Hibernate实体中获得。只有SQL查询才能访问时间戳。

如果您只想在数据库上生成时间戳,则可以使用触发器来生成时间戳。您还可以使用DescriptorCustomizer覆盖映射的insertSQL,以包含服务器的时间戳。

如果您想要回时间戳,那么您需要将连接表映射为一个实体,以便有一些地方存储数据。

最新更新