java - 为使用 @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
如何在我的测试环境中为此字段插入所需的值?
解决方案
@CreationTimestamp
您可以将其从字段中删除并使用以下命令管理该日期,而不是使用注释@PrePersist
:
@PrePersist
void onCreate() {
this.setCreatedAt(Instant.now());
}
当然,你可以在那里检查你想要的任何东西。你仍然可以updatable=false
在球场上。