ObjectBox中ToMany关系下如何查询不存在关联对象的实体?
解决方案
你可以直接通过ObjectBox提供的关联查询能力在数据库层面完成过滤,无需全量查询后再做内存遍历,代码实现如下:
// 直接查询所有未关联任何Delivery的Attribute实体 List<Attribute> emptyDeliveryAttrs = attributeBox.query() .link(Attribute_.delivery) // 关联Attribute到Delivery的ToMany关系 .isNull() // 筛选无关联匹配的记录 .build() .find(); // 遍历结果打印日志即可,无需额外判断关联是否为空 for (Attribute attr : emptyDeliveryAttrs) { Timber.i("Attribute without delivery: %s", attr.getName()); }
说明
- 该方案利用ObjectBox的关联查询特性,直接在数据库层完成过滤,相比全量查询后遍历的实现,在数据量较大的场景下性能优势非常明显
- 代码中的
Attribute_是ObjectBox编译时自动生成的元模型类,如果IDE提示找不到该类,先清理并重新编译项目即可 - 如果你的ToMany字段名不是
delivery,替换成自己实体类中对应的字段名即可
内容的提问来源于stack exchange,提问作者Paul W
相关产品推荐
相关产品推荐

