ObjectBox一对多关联中删除父对象关联子项的问题
ObjectBox 删除指定父对象关联子项的正确实现
问题根源
你碰到的类型不匹配错误,是因为backlink方法的第一个参数需要传入父实体中被@Backlink标记的反向关联字段,而非子实体的ToOne字段,之前的写法搞反了关联方向。
两种可行解决方案
方案一:通过父对象的关联集合直接删除
这是最简洁的实现方式,直接操作目标客户的orders集合即可:
// 获取目标客户对象 final targetCustomer = customerBox.get(id); if (targetCustomer != null) { // 删除该客户的所有订单 targetCustomer.orders.removeAll(); // 将变更同步到数据库 targetCustomer.orders.applyChanges(); }
方案二:通过QueryBuilder构建正确关联查询批量删除
如果不需要加载父对象,可修正查询语句,基于父实体的反向关联字段构建查询:
// 构建查询:筛选出属于指定ID客户的所有订单 final orderQuery = orderBox.query(Customer_.orders.backlink().equals(id)).build(); // 执行批量删除 orderQuery.remove(); // 释放查询资源 orderQuery.close();
原代码错误说明
之前的代码_queryBuilder.backlink(Order_.customer, Order_.customer.equals(id))存在两个核心问题:
backlink方法的第一个参数必须是父实体的ToMany反向关联字段(即Customer_.orders),而非子实体的ToOne字段Order_.customer- 泛型类型不匹配的报错正是因为传入了错误的关联字段,导致
QueryRelationToOne的泛型参数不符合要求
内容的提问来源于stack exchange,提问作者w461
相关产品推荐
相关产品推荐

