Java MongoDB каскадное исключение - PullRequest
0 голосов
/ 17 октября 2018

У меня вопрос по каскадированию в 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 представляет собой коллекцию нулей, но комментарии правильно сохраняются в отдельной коллекции.В чем проблема?Спасибо!

...