2017-07-10 53 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那是我做的,我感謝。 –