Установите значение для поля, аннотированного @CreationTimestamp - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть объект, у которого есть поле, помеченное @CreationTimestamp:

@Entity
@Table(name = "foo")
class Foo {
  ...
  @Column
  @CreationTimestamp
  private Instant createdAt;
}

И теперь у меня есть интеграционные тесты, в которых мне нужно создать несколько записей с разными createdAt метками времени.Но когда я устанавливаю значение, которое мне нужно, и сохраняю, оно переопределяется с отметкой времени создания виртуальной машины:

Foo foo = new Foo();
foo.setCreatedAt(Instant.MIN);
foo = fooRepo.save(foo);
foo.getCreatedAt(); // equals to the creation time

Как я могу вставить нужные значения для этого поля в моем тестовом окружении?

Ответы [ 2 ]

1 голос
/ 30 апреля 2019

Вместо использования @CreationTimestamp аннотации вы можете удалить ее из поля и управлять этой датой с помощью @PrePersist:

@PrePersist
void onCreate() {
    this.setCreatedAt(Instant.now());
}

Конечно, вы можете проверить, что хотите там. Вы все еще можете иметь updatable=false на поле.

1 голос
/ 30 апреля 2019

Я не думаю, что можно отключить это поведение в интеграционном тесте, как вам нужно здесь.

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

Это будет работать, поскольку @CreationTimestamp будет срабатывать только при первом сохранении объекта.

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