Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @CreatedDate注释字段未写入Insert,@LastModifiedDate为_Java_Spring_Spring Data_Auditing_Spring Data Jdbc - Fatal编程技术网

Java @CreatedDate注释字段未写入Insert,@LastModifiedDate为

Java @CreatedDate注释字段未写入Insert,@LastModifiedDate为,java,spring,spring-data,auditing,spring-data-jdbc,Java,Spring,Spring Data,Auditing,Spring Data Jdbc,我创建了以下实体,并使用h2对其进行了测试: @Getter public class Topic { @Id private long id; private final Title title; @CreatedDate private LocalDateTime createdAt; @LastModifiedDate private LocalDateTime lastModified; // ... } Top

我创建了以下实体,并使用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());
    }

}
我的应用程序用
@springbootplication
@EnableJdbcAuditing
注释

为什么
createdAt
仍然
null
lastModified
另一方面不为null

编辑 我将
Topic.createdAt
Topic.lastModified
的类型更改为
Instant
,但这不起作用

此外,我还添加了以下方法,我想应该为
Instant
字段提供值:

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

遗憾的是,尽管调用了该方法,
createdAt
仍然是
null

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

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

您不需要
AuditorAware
bean。
这仅适用于
@CreatedBy
@LastModifiedBy

可能重复的@SudhirOjha,谢谢您的回复。我希望它不是重复的,因为我想使用
spring数据jdbc
,而不是
jpa
。你能创建一个github存储库来复制它吗?我创建了一个项目来演示我的案例,结果成功了。在写这个问题之前,我使用了
UUID
s而不是
long
s,并实现了一个
BeforeSave
事件侦听器来创建它们。是不是它干扰了有关
CreatedDate
注释的任何内容,可能吞没了事件?@jenschauder我在这里上传了我的演示项目:github.com/joshavg/created-at-sdjdbc聚合的子实体Reply没有编写CreatedDate。这可能是因为子实体先被删除,然后在修改时重新插入?