我有一个实体,该实体的字段用@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
如何在测试环境中为此字段插入所需的值?
答案 0 :(得分:1)
我认为您不可能在集成测试中禁用此行为。
但是,您可以使用一种解决方法来实现此目的,方法是在保存实体之后设置创建日期,然后再次保存实体以保留新的所需创建时间。
这将起作用,因为@CreationTimestamp
仅在首次保存实体时才会触发。
答案 1 :(得分:1)
您可以将其从字段中删除,并使用@CreationTimestamp
来管理该日期,而不是使用@PrePersist
批注:
@PrePersist
void onCreate() {
this.setCreatedAt(Instant.now());
}
当然,您可以在其中检查任何内容。您仍然可以在该字段上输入updatable=false
。