上下文
您好,我正在处理 2 个通过外键关联的表,WorkOrderItemUsage 和 WorkOrderItemUsageLot。每个 workOrderItemUsage 都可以有多个批处理,因此它是 1 对 n 的关系,为了让我的工作更轻松,我正在实现一个名为 WorkOrderItemUsageWithLots 的辅助实体,它用于使用 room @Relation 从两个表中一次性检索所有数据。
问题
我已经尝试将@Relation 与单列一起使用并且它工作正常,但我需要基于像外键这样的复合键来建立我的关系,我知道不支持使用@Relation 的复合键我'我正在尝试使用索引链接它,我是否遗漏了什么?我是否必须拒绝使用 @Relation 以支持查询中良好的 ol SQL 连接?
- 错误:在 WorkOrderItemUsageWithLots 中找不到父实体列
woItemUsagePk
- 错误打印@Relation 的可用列
选项:woIdItemUsage、itemId、itemNumber、itemThirdNumber、itemDescription、quantityMeasure、branchId、branchDescription、locationId、doseQuantity、doseMeasureUnit、itemAction、itemPlague、itemJustification 私有(private)java.util.List lotList
@Entity( primaryKeys = ["itemId", "branchId", "woIdItemUsage"], foreignKeys = [ ForeignKey(entity = WorkOrder::class, parentColumns = ["woId"], childColumns = ["woIdItemUsage"], onUpdate = ForeignKey.CASCADE, onDelete = ForeignKey.CASCADE)], indices = [Index("woIdItemUsage", "itemId", "branchId", name = "woItemUsagePk", unique = true)] @Entity( primaryKeys = ["woIdItemUsageLot", "itemId", "branchId", "lotId"], foreignKeys = [ ForeignKey(entity = WorkOrderItemUsage::class, parentColumns = ["woIdItemUsage", "itemId", "branchId"], childColumns = ["woIdItemUsageLot", "itemId", "branchId"], onUpdate = ForeignKey.CASCADE, onDelete = ForeignKey.CASCADE)], indices = [Index("woIdItemUsageLot", "itemId", "branchId", name = "woItemUsageLotPk", unique = true)]) class WorkOrderItemUsageWithLots(@Embedded var itemUsage: WorkOrderItemUsage) { @Relation(parentColumn = "woItemUsagePk", entityColumn= "woItemUsageLotPk") var lotList: List<WorkOrderItemUsageLot> = emptyList()}
最佳答案
您的实体类中没有声明 woItemUsagePk
字段。您需要声明一个字段来保存值,Room 不会为您动态声明它。
关于android - Room @Relation 使用复合索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54444101/