Spring Data заполняет @LastModifiedDate не @CreatedDate
У меня есть следующий пример приложения Spring Boot. Сумасшедшая вещь, если я добавлю @EnableMongoAuditing
аннотация на компоненте SampleApplication, 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, идентификатор не будет установлен в соответствии с вашим фрагментом кода, isNew()
метод будет возвращен как ложный, следовательно, только LastModifiedDate будет установлен платформой. Либо изменить isNew()
условие метода для return id == null;
или просто не реализуйте интерфейс Persistable, какая бы стратегия по умолчанию для isNew не была выбрана.