Room数据库一对多关联查询异常:每个父项仅返回一个子项
问题描述
我有Inspection和Items两个类,二者为一对多关系(一个Inspection对应多个Items,每个Item仅关联一个Inspection),并在Room本地数据库中对应两张表:
Inspection表实体类
@Entity(tableName = "vehicle_inspection") public class VehicleInspectionDB { @PrimaryKey(autoGenerate = true) private long inspectionDBId; // 其他字段... }
Item表实体类
@Entity(tableName = "inspection_item") public class VehicleInspectionItemDB { @PrimaryKey(autoGenerate = true) private long itemDBId; private long inspectionDBId; // 其他字段... }
为了查询Inspection及其关联的Items,我创建了如下类:
关联查询实体类
public class InspectionAndItemsDB { @Embedded public VehicleInspectionDB inspection; @Relation( parentColumn = "inspectionDBId", entityColumn = "itemDBId" ) public List<VehicleInspectionItemDB> items; }
以及对应的DAO方法:
DAO查询方法
@Transaction @Query("SELECT * FROM vehicle_inspection") Flowable<List<InspectionAndItemsDB>> getInspectionAndItems();
问题现象
调用上述方法查询时,每个Inspection对应的items列表仅包含一个子项,而非所有关联的Items。我参考了谷歌开发者的教程仍未解决,请问问题出在哪里?
问题原因与解决方法
问题出在@Relation注解的entityColumn参数配置错误:
parentColumn指定父实体(VehicleInspectionDB)的关联主键字段,这里的inspectionDBId是正确的。entityColumn需要指定子实体(VehicleInspectionItemDB)中关联父实体的外键字段,而非子实体自身的主键itemDBId。你的子实体中用来关联父实体的字段是inspectionDBId,所以此处配置错误。
修正后的关联查询实体类代码:
public class InspectionAndItemsDB { @Embedded public VehicleInspectionDB inspection; @Relation( parentColumn = "inspectionDBId", entityColumn = "inspectionDBId" ) public List<VehicleInspectionItemDB> items; }
修正后Room就能通过父实体的inspectionDBId匹配子实体中对应的外键字段,正确查询到所有关联的Items。
内容的提问来源于stack exchange,提问作者Olegario López
相关产品推荐
相关产品推荐

