首页 > 解决方案 > Java MongoDB 级联异常

问题描述

我有一个关于 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);
            }
        }
    });
}

}

事件监听器也包含在 mongo 配置中,如下所示:

@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 查看了 DB,它是 null 的集合,但评论被正确保存在单独的集合中。问题是什么?谢谢!

标签: javamongodbspring-bootspring-dataspring-data-mongodb

解决方案


推荐阅读