【问题标题】:Android Room: Resolve foreign key in queryAndroid Room:解析查询中的外键
【发布时间】:2020-07-23 07:36:32
【问题描述】:

鉴于以下数据模型(即一个客户可以有多个订单,一个订单可以有多个发货),我如何获取所有订单及其关联客户的列表以及某个订单日期的发货?

在 Kotlin 中,我想检索 List<OrderWithCustomerAndShipments> 类型的列表,其中 OrderWithCustomerAndShipments 是这样的 POJO:

data class OrderWithCustomerAndShipments(
    val order: Order,
    val category: Category,
    val shipments: List<Shipment>
)

方法

到目前为止,我有一个返回 List&lt;OrderWithShipments&gt; 的方法。

注意:为简洁起见,我省略了@TypeConverter@ForeignKey@ColumnInfo

@Dao
interface Dao {
    @Transaction
    @Query("SELECT * FROM orders WHERE orderDate = :date")
    fun getOrdersWithShipments(date: Date): LiveData<List<OrderWithShipments>>
}

data class OrderWithShipments(
    @Embedded
    val order: Order

    @Relation(parentColumn = "id", entityColumn = "orderId")
    val shipments = List<Shipment>
)

@Entity
data class Customer(
    @PrimaryKey val id: Int,
    val customerName: String
)

@Entity
data class Order(
    @PrimaryKey val id: Int,
    val customerId: Int,
    val orderDate: Date,
)

@Entity
data class Order(
    @PrimaryKey val id: Int,
    val orderId: Int,
    val shipmentDate: Date,
)

人们会假设将订单的外键解析给父客户比获取所有子发货更容易。但是,到目前为止,我试图获得父客户的尝试还没有成功。

【问题讨论】:

    标签: android kotlin android-room


    【解决方案1】:

    您是否尝试过以下方法?您可以在 Room 中使用多个 @Relation

    @Dao
    interface Dao {
        @Transaction
        @Query("SELECT * FROM orders WHERE orderDate = :date")
        fun getOrdersWithCustomerAndShipments(date: Date): LiveData<List<OrderWithCustomerAndShipments>>
    }
    
    data class OrderWithCustomerAndShipments(
        @Embedded
        val order: Order
    
        @Relation(parentColumn = "customerId", entityColumn = "id")
        val customer: Customer
    
        @Relation(parentColumn = "id", entityColumn = "orderId")
        val shipments: List<Shipment>
    )
    

    【讨论】:

    • 哇.. 很确定我已经尝试过了,但遇到了一些错误。不过,现在可以了!
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多