【问题标题】:@CreatedDate annotated field is not written on Insert, @LastModifiedDate is@CreatedDate 注释字段没有写在 Insert 上,@LastModifiedDate 是
【发布时间】:2019-10-25 19:36:18
【问题描述】:

我创建了以下实体并使用 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.createdAtTopic.lastModified的类型改成了Instant,还是不行。

另外,我添加了以下方法,我猜它应该为Instant 字段提供值:

@Bean
public AuditorAware<Instant> instantAuditorAware() {
    return () -> Optional.of(Instant.now());
}

遗憾的是,虽然方法被调用,createdAt 仍然是null

【问题讨论】:

  • @SudhirOjha 感谢您的回复。我希望它不是重复的,因为我想使用 spring-data-jdbc,而不是 jpa
  • 你能创建一个 github 存储库来重现这个吗?
  • 我创建了一个项目来演示我的案例,结果很有效。在写这个问题之前,我使用UUIDs 而不是longs 并实现了一个BeforeSave 事件监听器来创建它们。会不会是它干扰了关于CreatedDate 注释的任何事情,可能吞没了这个事件?
  • @JensSchauder 我在这里上传了我的演示项目:github.com/joshavg/created-at-sdjdbc Aggregate 的子实体 Reply 没有写入 CreatedDate。可能是因为子实体先被删除,然后在修改时重新插入?

标签: java spring spring-data auditing spring-data-jdbc


【解决方案1】:

审核注释只考虑聚合根。如果作为聚合的一部分但不是聚合根的实体需要审计信息,这可以通过在聚合根中实现它来完成,聚合根应该管理对其和聚合的实体的所有更改。

虽然问题中发布的源代码表明您实际上是在查看聚合根目录,但您通过 Github 提供的代码显示根目录上的注释工作正常,但非根实体上的注释不像上述那样。

您不需要AuditorAware bean。 只有@CreatedBy@LastModifiedBy 才需要。

【讨论】:

    猜你喜欢
    • 2017-05-09
    • 2017-12-14
    • 2021-08-18
    • 2021-01-15
    • 2019-07-21
    • 2018-04-13
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多