android - Room @Relation 使用复合索引

标签 android kotlin android-room

上下文

您好,我正在处理 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/

相关文章:

android - Android主题中的windowIsFloating属性

android - 如何应用随机数字列表从数组中选择图像?

google-app-engine - 使用Objectify捕获IllegalStateException

android - 健身房锻炼日志应用程序的数据库架构

android - Android 是否支持同时多个 HTTP 请求?

android - 如何在 Android 7 Nougat 上允许任意加载

java - 如何使用房间库?

android - 如何确保为每个设备创建一个房间,而不是每次启动应用程序时都创建一个新实例

java - 未找到 AdView 类

string - Kotlin 条件格式字符串