Spring AbstractMongoEventListener не срабатывает

Контекст: приложение Java8, Spring MongoDB 1.9.1

У меня есть коллекция, содержащая сущности A, и другая коллекция, содержащая сущности B. В моей доменной модели Entity A имеет коллекцию B в виде DBRef, как это

class A {
    @DBRef
    List<B> myBs;
}

Более того, я зарегистрировал два объекта AbstractMongoEventListener, один для A и другой для B. Если я получаю документ типа A или B напрямую через MongoTemplate.findById(), метод onAfterConvert() срабатывает нормально. Однако, если я просто выберу A, я бы ожидал, что метод onAfterConvert запускается также для каждого элемента B в списке DBRef'а A. На самом деле это не так.

Я рискну предположить, что это работает как задумано, с другой стороны, я не вижу причины, по которой onAfterConvert не должен работать для какой-либо сущности / документа, загружаемого из БД.

Короче говоря, мне нужно сделать некоторую постобработку для всех элементов B после того, как A был загружен. У кого-нибудь есть элегантное решение для этого?

2 ответа

Решение

Понятия не имею, если есть лучшие способы решить это, но это работает для меня:

Перезапишите метод resolDbRef() в расширенном DefaultDbRefResolver и передайте ему свой собственный MappingMongoConverter при создании компонента.

Другие ответы / рекомендации приветствуются

Я думаю, что это связано с https://jira.spring.io/browse/DATAMONGO-1044 - должно быть исправлено в следующем основном выпуске Spring Data MongoDB (1.10).

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