首页 > 解决方案 > 为使用 @CreationTimestamp 注释的字段设置值

问题描述

我有一个带有注释的字段的实体@CreationTimestamp

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

现在我有集成测试,我需要创建一些具有不同createdAt时间戳的条目。但是,当我将值设置为我需要的值并保存时,它会被 VM 的创建时间戳覆盖:

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

如何在我的测试环境中为此字段插入所需的值?

标签: javahibernatespring-bootjpaspring-data-jpa

解决方案


@CreationTimestamp您可以将其从字段中删除并使用以下命令管理该日期,而不是使用注释@PrePersist

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

当然,你可以在那里检查你想要的任何东西。你仍然可以updatable=false在球场上。


推荐阅读