JPA устанавливает временную метку, сгенерированную базой данных, но не CURRENTTIME или UPDATETIME - PullRequest
0 голосов
/ 24 декабря 2018

У меня есть такой класс

@Entity
@Table(name = "Event")
public class Event {

  @Transient
  public static final long MAX_TIMESTAMP = 253402214400000L; // 9999-12-31 00:00:00
  private Date creationTime;
  private Date expiryTime;
  private String otherValue;

  public Event(int timeout, String otherValue){
    this.creationTime = new Date();
    this.expiryTime = (timeout == 0 ? new Date(MAX_TIMESTAMP) : new Date(creationTime.getTime() + SECONDS.toMillis(timeout)));
    this.otherValue = otherValue;
  }
}

Я вызываю save () methed в CrudRepository и сохраняю эти данные.

и у меня есть ScheduledExecutorService, чтобы выяснить некоторые события тайм-аута:

@Query("SELECT t FROM Event t WHERE t.expiryTime < CURRENT_TIMESTAMP")
  List<Event> findTimeoutEvents();

этот CURRENT_TIMESTAMP - это время базы данных, а expiryTime - нет.Это означает, что я должен сделать так, чтобы их время было одинаковым. Иногда приложение и база данных находятся не на одном компьютере, я не могу убедиться, что их время одинаково.Как я могу передать параметр "timeout" в базу данных.

база данных может быть postgresql или mysql.

большое спасибо.

1 Ответ

0 голосов
/ 24 декабря 2018

Прежде всего, я не уверен, что ваш код работает, поскольку экземпляр java.util.Date (если время истечения равно java.util.Date объект) нельзя сравнить с int 0.

Что касается генерацииexpiryTime, да, вы, очевидно, можете.Посмотрите, как работают триггеры .

Также я хотел бы добавить, что если вы используете spring-boot-starter-data-jpa, вы можете аннотировать поле creationTime аннотацией @CreationTimestamp.Но я бы лично установил значение по умолчанию CURRENT_TIMESTAMP() на стороне дБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...