房间关系匹配多个列

时间:2018-07-23 09:33:02

标签: android android-room android-architecture-components

我之间的实体之间应该有这样的关系:

概述->有很多->类别->有很多->交易

如果Category.overviewId == Overview.id,则

类别应包含在Overview中。我很确定我应该能够使用@Relation注释实现此目标,例如:

@Relation(parentColumn = 'id', entityColumn = 'overviewId')
List<Category> categories;

然后,我要在Category实体中包括任何其中Transaction.overviewId == Category.overviewId && Transaction.categoryId == Category.categoryId的交易。这是我正在努力的部分,因为@Relation批注似乎只能考虑1列。我想我想要类似的东西:

@Relation(parentColumn = {'overviewId','categoryId'}, entityColumn = {'overviewId','categoryId'})
List<Transaction> transactions;

但这似乎不是一种有效的处理方式。 有谁知道我应该如何做到这一点? 我想最终我希望能够观察到一个查询,该查询将在相关的“概述”,“类别”或“事务”更新时更新,因此将“类别”和“事务”嵌入“概述”中似乎是最好的方法,但是如果有更好的选择听起来很棒。

1 个答案:

答案 0 :(得分:0)

遇到同样的问题,想出了@Transaction

while

StoreWithProductsDb是常规数据类的地方

@Query("SELECT * FROM store_table WHERE userId = :userId AND storeId = :storeId")
fun getStore(storeId:String, userId:String): StoreDb?

@Query("SELECT * FROM product_table WHERE userId = :userId AND storeId = :storeId")
fun getProducts(storeId:String, userId:String):List<ProdusctsDb>

@Transaction
fun getStoreWithProducts(storeId:String, userId:String): StoreWithProductsDb{
    val storeDb: StoreDb = getStore(storeId,userId) ?: return null
    val products = getProducts(storeId,userId)
    return  StoreWithProductsDb(storeDb, products)
}

PS:仅作为示例,所有名称都是随机的