Spring 数据填充@LastModifiedDate 而不是@CreatedDate

Spring Data fills @LastModifiedDate by not @CreatedDate

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

文档 class:

@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);
    }
}

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