Как предотвратить автоматическую генерацию @UpdateTimestamp в Spring Boot - PullRequest
0 голосов
/ 02 марта 2020

Я использую 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 автоматически получает текущее время (что время обновления), но я не хочу автоматическое обновление c. Я хочу, чтобы update_time изменился только при обновлении поля состояния. Как это может быть достигнуто ??? Спасибо!

1 Ответ

0 голосов
/ 02 марта 2020

Я не хочу, чтобы время обновлялось при изменении любого другого поля, кроме статуса. ... Как этого достичь?

Вы не делаете этого с @UpdateTimestamp.

Цель @UpdateTimestamp - иметь временную метку, которая обновляется всякий раз, когда сущность сохраняется независимо от того, что изменилось.

Как писал Динар Зарипов в комментариях, правильный способ решить эту проблему написать собственный слушатель сущности, получить список обновленных полей, как описано здесь https://discourse.hibernate.org/t/what-is-the-order-of-properties-when-calling-getdirtyproperties-from-postupdateevent/975/2 и соответственно изменить вашу сущность.

...