如何防止在Spring Boot中自动生成@UpdateTimestamp

时间:2020-03-02 06:35:17

标签: hibernate timestamp

我正在使用Spring Boot创建API,并且每当尝试使用PUT端点时,时间戳@UpdateTimestamp都会自动获取更新时间。当我更改状态以外的任何其他字段时,我不希望时间更新。以下是模型。

 @CreationTimestamp
 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 @Column(name = "start_time", updatable = false, nullable = false)
 Timestamp creationTime;

 @UpdateTimestamp
 @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 @Column(name = "update_time")
 Timestamp updateTime;

 @Column(name = "first_name")
 String first_name;

 @Column(name = "last_name")
 String last_name;

 @Column(name = "age")
 String age;

 @Column(name = "mobile_number")
 String mobile_number;


 @Enumerated(EnumType.ORDINAL)
 @Column(name = "status")
 private StatusEnum status;

StatusEnum具有

public enum StatusEnum {
    AVERAGE, FAIL , GOOD , EXCELLENT ;
}

当我尝试更新age或mobile_number或任何其他字段时,update_time自动获取当前时间(即更新时间),但是我不希望自动更新。我只想在更新状态字段时更改update_time。如何实现??? 谢谢!

1 个答案:

答案 0 :(得分:1)

当我更改状态以外的任何其他字段时,我不希望时间更新。 ... 如何实现?

您不使用@UpdateTimestamp执行此操作。

@UpdateTimestamp的目的是使时间戳记在每次保存实体时都进行更新,而无论发生什么更改。

正如Dinar Zaripov在评论中所写,解决此问题的正确方法是编写您自己的实体侦听器,如此处https://discourse.hibernate.org/t/what-is-the-order-of-properties-when-calling-getdirtyproperties-from-postupdateevent/975/2所述获取更新的字段列表,并相应地修改您的实体。