小编典典

使用休眠JPA注释来设置自动生成时间的困难时间

hibernate

多亏了你们,我对hibernate的了解大大提高了。现在我在这里碰到有关current_timestamp的问题。这是我的密码

@Column(name="DATE_CREATED", insertable=false, updatable=false, columnDefinition="timestamp default current_timestamp")
@org.hibernate.annotations.Generated(value=GenerationTime.INSERT)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date dateCreated;

@Column(name="LAST_MODIFIED", insertable=false, updatable=false, columnDefinition="datetime")
@org.hibernate.annotations.Generated(value=GenerationTime.ALWAYS)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date lastModified;

我希望date_created获得current_timestamp,并且我希望lastmodified为每次更新插入时间。显然我不能在同一张表上有2个current_timestamp字段。还有其他方法可以实现吗?谢谢阅读


阅读 479

收藏
2020-06-20

共1个答案

小编典典

这与Hibernate本身无关。上面指定的注释告诉Hibernate这些值将由数据库生成,因此在插入/更新实体后需要重新加载这些值。

如果这是您要使用的方式,则需要配置数据库(例如,通过创建触发器)以根据需要填充date_created/ last_modified列。

另一种方法是不将这些字段标记为已生成,而是在Java代码中更新它们。如果您正在使用JPA(通过Hibernate
EntityManager),则通过@PrePersist /
@PreUpdate
回调方法执行此操作很简单:

@PreUpdate
@PrePersist
public void updateTimeStamps() {
    lastModified = new Date();
    if (dateCreated==null) {
      dateCreated = new Date();
    }
}
2020-06-20