Room数据库嵌套实体构建报错:无法找到detailsTId列求助
问题分析与解决方案
报错Cannot find the child entity column 'detailsTId' in PartEntity的核心原因是:DetailsEntity中的@Relation注解未指定正确的关联实体类。
Room处理嵌套查询时,默认会把@Relation标注的集合泛型类(这里是PartEntity)当作关联实体,但PartEntity只是用于封装嵌套数据的POJO(无@Entity注解),真正对应数据库表的实体是PartCargo,detailsTId字段存在于PartCargo中而非PartEntity,因此Room找不到对应字段。
修复步骤
修改DetailsEntity中的@Relation注解,明确指定关联的实体类为PartCargo:
data class DetailsEntity( @Embedded val details: DetailsCargo, @Relation( parentColumn = "tId", entityColumn = "detailsTId", entity = PartCargo::class // 关键:指定关联的数据库实体类 ) val parts: List<PartEntity>? ) : Serializable
补充说明
- PartEntity是Room用于嵌套查询的数据封装类,并非数据库表对应的实体(无@Entity注解),必须通过
entity参数告知Room要关联的真实实体类PartCargo。 - 其余实体与DAO的写法基本正确,DAO中的事务插入逻辑可正常运行。另外
getDetails方法的查询语句可调整为SELECT * FROM details WHERE id = :targetId(避免参数名与列名同名引发的潜在歧义),但这并非本次报错的原因。
内容的提问来源于stack exchange,提问作者Abuzaid
相关产品推荐
相关产品推荐

