Room框架报错:实体类需可用公共构造函数,求解决方法
错误原因及修复方案
核心问题
你遇到的错误是因为Room不支持用@Embedded注解标记集合类型(比如List<BilleEntity>),同时实体类的关联结构逻辑颠倒,导致Room无法生成可用的构造函数实例化实体。
修复步骤
1. 修正GrumeBillesEntity实体类
调整实体结构,以Grume作为父实体,通过@Relation关联对应的BilleEntity列表(一对多关系)。@Embedded仅用于嵌入单个对象,不能用于集合:
data class GrumeBillesEntity( // 嵌入父实体Grume @Embedded val grume: Grume, // 关联该Grume对应的所有BilleEntity列表 @Relation( parentColumn = "id_grume", // 父实体Grume的关联字段 entityColumn = "id_grume" // 子实体BilleEntity的关联字段 ) val billes: List<BilleEntity> )
2. 修正DAO查询方法
无需手动编写JOIN语句,Room会通过@Relation自动处理关联查询。只需先查询符合条件的Grume,Room会自动关联对应的Bille数据:
@Transaction @Query("SELECT * FROM grume WHERE id_bordereau = :idBordereau") suspend fun getAllBillesByBordereau(idBordereau: String): List<GrumeBillesEntity>
补充说明
@Transaction注解必须保留,因为关联查询需要在同一个事务中完成父表和子表的查询。- 确保
Grume和BilleEntity都是Room的实体类(带有@Entity注解),且id_grume字段在两个实体中都存在并正确映射。
内容的提问来源于stack exchange,提问作者eya tayari
相关产品推荐
相关产品推荐

