@CreatedDate注解字段没有写在Insert上,@LastModifiedDate是
@CreatedDate annotated field is not written on Insert, @LastModifiedDate is
我创建了以下实体并使用 h2 对其进行了测试:
@Getter
public class Topic {
@Id
private long id;
private final Title title;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime lastModified;
// ...
}
TopicRepository
是一个空接口。
以下测试失败,错误为 createdAt
为空:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BasicRepositoryTests {
@Autowired
TopicRepository topicRepository;
@Test
public void topicRepositoryWorks() {
val topic = new Topic();
val savedTopic = topicRepository.save(topic);
assertEquals(1, topicRepository.count());
assertNotNull(savedTopic.getLastModified(), "lastModified must be set");
assertNotNull(savedTopic.getCreatedAt(), "createdAt must be set");
topicRepository.delete(savedTopic);
assertEquals(0, topicRepository.count());
}
}
我的申请被注释为 @SpringBootApplication
和 @EnableJdbcAuditing
。
为什么createdAt
还是null
,而lastModified
不为空?
编辑
我将 Topic.createdAt
和 Topic.lastModified
的类型更改为 Instant
,但没有用。
此外,我添加了以下方法,我猜它应该为 Instant
字段提供值:
@Bean
public AuditorAware<Instant> instantAuditorAware() {
return () -> Optional.of(Instant.now());
}
遗憾的是,尽管调用了该方法,createdAt
仍然是 null
。
审核注解只考虑聚合根。如果作为聚合的一部分但不是聚合根的实体需要审计信息,这可以通过在聚合根中实现它来完成,聚合根应该管理对它和聚合的实体的所有更改。
虽然问题中发布的源代码表明您实际上正在查看聚合根,但您通过 Github 提供的代码表明根上的注释工作正常但非根实体上的注释不起作用' 如上所述。
您不需要 AuditorAware
bean。
只有 @CreatedBy
和 @LastModifiedBy
.
才需要
我创建了以下实体并使用 h2 对其进行了测试:
@Getter
public class Topic {
@Id
private long id;
private final Title title;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime lastModified;
// ...
}
TopicRepository
是一个空接口。
以下测试失败,错误为 createdAt
为空:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BasicRepositoryTests {
@Autowired
TopicRepository topicRepository;
@Test
public void topicRepositoryWorks() {
val topic = new Topic();
val savedTopic = topicRepository.save(topic);
assertEquals(1, topicRepository.count());
assertNotNull(savedTopic.getLastModified(), "lastModified must be set");
assertNotNull(savedTopic.getCreatedAt(), "createdAt must be set");
topicRepository.delete(savedTopic);
assertEquals(0, topicRepository.count());
}
}
我的申请被注释为 @SpringBootApplication
和 @EnableJdbcAuditing
。
为什么createdAt
还是null
,而lastModified
不为空?
编辑
我将 Topic.createdAt
和 Topic.lastModified
的类型更改为 Instant
,但没有用。
此外,我添加了以下方法,我猜它应该为 Instant
字段提供值:
@Bean
public AuditorAware<Instant> instantAuditorAware() {
return () -> Optional.of(Instant.now());
}
遗憾的是,尽管调用了该方法,createdAt
仍然是 null
。
审核注解只考虑聚合根。如果作为聚合的一部分但不是聚合根的实体需要审计信息,这可以通过在聚合根中实现它来完成,聚合根应该管理对它和聚合的实体的所有更改。
虽然问题中发布的源代码表明您实际上正在查看聚合根,但您通过 Github 提供的代码表明根上的注释工作正常但非根实体上的注释不起作用' 如上所述。
您不需要 AuditorAware
bean。
只有 @CreatedBy
和 @LastModifiedBy
.