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

问题描述 投票:1回答:1

在我的Entity类中有dateCreated和dateUpdated等字段。要自动更新这些字段,我使用@PrePersist和dateUpdated字段使用@PreUpdate注释dateCreated字段。它为我解决了。在创建新实体时,dateCreated字段会更新,但在更新实体时,dateCreated字段将变为null,并且dateUpdated字段将更新。任何人都可以告诉为什么会发生这种情况?

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

java hibernate jpa
1个回答
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();
}
© www.soinside.com 2019 - 2024. All rights reserved.