java - 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 的集合,但评论被正确保存在单独的集合中。问题是什么?谢谢!
解决方案
推荐阅读
- python - Python Apache Beam:日期值超出范围
- node.js - 是否可以使用 AWS Lambda Web 控制台中的 Cloud9 代码编辑器访问客户资料 API?如果是这样,怎么做?
- json - 在 jsonchema 中验证 2 种可能的数据类型
- google-apps-script - 生成随机值并在 Google 表单中打印
- google-sheets - PHP Google Spreadsheets 选择要写入的表格
- java - 制作 JInternalFrame 模态
- php - Laravel Voyager 缺少必需的参数
- docker - 如何持久化 alpine-nginx 日志文件?
- mercurial - 如何使用善变的“差异模式”?
- html - 如何在 MathJax 中删除数学的顶部/底部填充?