You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 13:50:42