每当记录更新时,我都需要通过SYSDATE更新LastUpdatedDttm。但是,在annoataions下面没有按照需要工作。 SYSDATE仅插入一次,并且不会更新以用于后续更新。另外,lastUpdDTTM不是hibernate生成的sql的一部分。
@Generated(GenerationTime.ALWAYS)
@Column(name="LAST_UPDATED_DTTM",insertable=false,updatable=true, columnDefinition ="timestamp default SYSDATE")
private Date lastUpdDTTM;
@Generated(GenerationTime.ALWAYS)
@Column(name="CREATED_DTTM", insertable=false, updatable=false)
private Date createdDTTM;
答案 0 :(得分:0)
(...)SYSDATE只插入一次,不会更新以供后续更新。
首先,让我说清楚一点:Generated
表示该字段由数据库生成 ,并且Hibernate需要在插入/更新后读取它以更新实体。在列定义中使用default SYSDATE
适用于INSERT,但对于UPDATE,您需要一个触发器。
此外,lastUpdDTTM不是hibernate生成的sql的一部分。
好吧,你告诉Hibernate这个字段是ALWAYS
由数据库生成的,所以我并不觉得Hibernate不会在生成的SQL中包含它(实际上,我认为这与{{{ 1}},我希望Hibernate能够抱怨它。)
无论如何,正如我所说,不是Hibernate会更新这个字段,它是数据库而你需要一个触发器,Hibernate只会在更新后刷新实体以获取新值。
另一种方法是使用回调注释,例如上次更新日期:
udpatable = true
为了更好的一致性,您甚至可以使用@PreUpdate
protected void updateDates() {
lastUpdDTTM = new Date();
}
创建日期使用相同的方法:
@PrePersit