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 не была выбрана.

Другие вопросы по тегам