Spring Data 填充 @LastModifiedDate 而非 @CreatedDate

Posted

技术标签:

【中文标题】Spring Data 填充 @LastModifiedDate 而非 @CreatedDate【英文标题】:Spring Data fills @LastModifiedDate by not @CreatedDate 【发布时间】:2017-12-14 09:00:55 【问题描述】:

我有以下 Spring Boot 示例应用程序。 疯狂的是,如果我在 SampleApplication bean 上添加 @EnableMongoAuditing 注释,lastModifiedDate 将不会被 createDate 填充。这是为什么?我在网上搜索了很多人在更新期间清空createDate 时遇到问题,但我没有更新。

文档类:

@Document
public class SampleBean implements Persistable<String> 

    @Id
    public String id;
    @CreatedDate
    public LocalDateTime createDate;
    @LastModifiedDate
    public LocalDateTime lastModifiedDate;

    public String name;

    @Override
    public String getId() 
        return id;
    

    @Override
    public boolean isNew() 
        return id != null;
    

存储库接口:

@Repository
public interface SampleBeanRepository extends MongoRepository<SampleBean, String> 

休息控制器:

@RestController
public class WebService 

    @Autowired
    private SampleBeanRepository repository;

    @RequestMapping("/insert")
    public String insert() 
        SampleBean sampleBean = new SampleBean();
        sampleBean.name = "Prefix" + new Random().nextInt(1000);
        repository.insert(sampleBean);
        return "done";
    

    @RequestMapping("/")
    public Collection<SampleBean> home() 
        return repository.findAll();
    


应用配置:

@SpringBootApplication
@EnableMongoAuditing
public class ApplicationConfig 

    public static void main(String[] args) 
        SpringApplication.run(ApplicationConfig.class, args);
    

【问题讨论】:

【参考方案1】:

您的isNew() 策略是这里的罪魁祸首。由于您已将条件设置为id != null。每次创建 SampleBean 时,都不会根据您的代码 sn-p 设置 id,isNew() 方法将返回为 false,因此框架只会设置 LastModifiedDate。要么将 isNew() 方法条件更改为 return id == null;,要么不实现 Persistable 接口,无论选择 isNew 的默认策略。

【讨论】:

以上是关于Spring Data 填充 @LastModifiedDate 而非 @CreatedDate的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring-Data-JPA进行Spring启动:每次请求时都会填充ArrayList / JSON对象

Spring Boot Data JPA @CreatedBy 和 @UpdatedBy 未填充使用 OIDC 进行身份验证

模拟 Spring Data Rest 存储库

带有 H2 和 data.sql 的 Spring Boot Data JPA - 未找到表

Spring Data @CreatedDate 注释对我不起作用

Spring Data JPA:如何使用可选的过滤器参数?