我正在寻找一种方法,将OneToMany关系中两个实体之间的自动生成的链接表扩展为一个额外的时间戳列。
目的是什么? 每个实体本身都有一个时间戳,显示上次更改的时间。但是没有办法 看看所做出的改变。对于我们来说,看看地点和事件之间的分配是在什么时间进行的,这是很有必要的。
@Entity
public class Place{
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
private final List <Event> events = new ArrayList<Event>();
....
}
数据库包含三个表。 PLACE,EVENT和PLACE_EVENT。 表PLACE_EVENT有两列:PLACE_ID和EVENT_ID。
我想要一个带有简单时间戳的第三列“CREATED”。 有没有办法以自动方式生成此时间戳。我不想自己创建一个新的实体PLACE_EVENT。
我不确定这是否可行,但我很感激任何提示。
我在eclipselink和db2驱动程序中使用jpa 2.0。
答案 0 :(得分:0)
您可以自己创建表(即不依赖于实体的自动模式创建),并添加时间戳列,其默认值设置为now()
。
但要注意有时候(我记不清楚在哪种情况下),当Hibernate向A添加一个新的实体B时,它会从连接表中删除所有引用A的行并重新插入它们。
另请注意,timestamp字段将填充在数据库中,但不会从Hibernate实体中获得。只有SQL查询才能访问时间戳。
答案 1 :(得分:0)
如果您只想在数据库中使用它,可以使用触发器生成时间戳。 您还可以使用DescriptorCustomizer覆盖映射的insertSQL以包含服务器的时间戳。
如果您想要返回时间戳,那么您需要将连接表映射为实体,以便有一些地方存储数据。