2017-07-10 41 views
1

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

文档类:

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

回答

2

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

+0

Yeap那是我做的,我感谢。 –