Spring数据填充@LastModifiedDate不是@CreatedDate

时间:2017-07-10 14:50:50

标签: java spring-boot spring-data spring-data-mongodb auditing

我有以下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 个答案:

答案 0 :(得分:4)

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