У меня вопрос по каскадированию в MongoDB;Так.Мой проект основан на Java 10 и Spring Boot 2.0.5 и Lombok.Я создал прослушиватель событий CascadeSave, и вот он
public class CascadeSaveMongoEventListener extends AbstractMongoEventListener {
@Autowired
private MongoOperations mongoOperations;
@Override
public void onBeforeConvert(BeforeConvertEvent event) {
Object source = event.getSource();
ReflectionUtils.doWithFields(source.getClass(), field -> {
ReflectionUtils.makeAccessible(field);
if (field.isAnnotationPresent(DBRef.class) && field.isAnnotationPresent(CascadeSave.class)) {
Object fieldValue = field.get(source);
if (fieldValue instanceof Collection<?>) {
Collection collection = (Collection<?>) fieldValue;
for (Object o : collection) {
mongoOperations.save(o);
}
} else {
mongoOperations.save(fieldValue);
}
}
});
}
}
Прослушиватель событий также включен в конфигурацию монго, например:
@Bean
public CascadeSaveMongoEventListener cascadingMongoEventListener() {
return new CascadeSaveMongoEventListener();
}
И вот какКласс домена выглядит следующим образом:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Article {
@Id
private String id;
@DBRef(lazy = true)
@CascadeSave
private List<Comment> comments;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
@Document
public class Comment {
@Id
private String id;
private String text;
}
Проблема в том, что после сохранения я смотрю на БД через Mongo Compass, а Article.comments представляет собой коллекцию нулей, но комментарии правильно сохраняются в отдельной коллекции.В чем проблема?Спасибо!