使用@PrePersist和@PreUpdate时,创建的日期字段在更新时变为空

时间:2017-12-29 16:51:29

标签: java hibernate jpa

在我的Entity类中有dateCreated和dateUpdated等字段。要自动更新这些字段,我使用@PrePersist和dateUpdated字段使用@PreUpdate注释dateCreated字段。它为我解决了。在创建新实体时,dateCreated字段会更新,但在更新实体时,dateCreated字段将变为null,并且dateUpdated字段将更新。谁能告诉你为什么会这样?

我正在使用Hibernate 4.3.6版本和JPA 2.0

1 个答案:

答案 0 :(得分:0)

下面的注释(@PrePersist,@ PreUpdate)会导致在数据库插入或更新之前调用它们下面的方法,以使这些字段保持同步。我将它们放在BaseEntity上,然后在我的所有实体上扩展BaseEntity。

@PrePersist
protected void onCreation()
{
    dateCreated = Instant.now();
    dateUpdated = Instant.now();
}

@PreUpdate
protected void onUpdate() 
{
    dateUpdated = Instant.now();
}

以上假设您使用的是java.Instant,但如果您使用的是java.Date,则可以使用以下内容:

@PrePersist
protected void onCreation()
{
    dateCreated = new Date();
    dateUpdated = new Date();
}

@PreUpdate
protected void onUpdate() 
{
    dateUpdated = new Date();
}