使用复合索引的 Room @Relation

3

背景

你好,我正在处理两个通过外键关联的表,WorkOrderItemUsage和WorkOrderItemUsageLot。每个workOrderItemUsage可以有多个批次,因此它是一个1到n的关系,为了使我的工作更容易,我正在实现一个辅助实体称为WorkOrderItemUsageWithLots,它用于使用room @Relation一次检索来自两个表的所有数据。

问题

我尝试使用@Relation与单个列,并且它可以正确工作,但我需要基于复合键(如外键)建立我的关系,我了解到@Relation不支持复合键,我正在尝试使用索引进行链接,我错过了什么吗?我必须拒绝使用@Relation而支持在查询中使用SQL连接吗?

  • error: Cannot find the parent entity column woItemUsagePk in WorkOrderItemUsageWithLots
  • Error prints the available columns for @Relation
  • Options: 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()}
    

1
我使用带有@Embebed字段的实体并在SQL查询中使用内联接来实现它。 - marcos E.
1个回答

0

你的实体类中没有声明 woItemUsagePk 字段。你需要声明一个字段来保存这个值,Room 不会为你动态声明它。


1
这是一个 hack / workaround 尝试使用具有复合主键的 Relation 注释进行工作,以便我可以利用查询中的 @Relation,但目前尚不支持。我决定采用“使用包含嵌入字段的实体和 SQL 查询上的内部连接”的方法。 - marcos E.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接