我正在Android Room中使用以下查询从与外键相关的两个表中获取值。 Item
是Transaction
与列upc
相关的外键。 unique_id
是唯一的交易号。
@Query("SELECT * FROM Transaction t INNER JOIN Item i ON i.upc=t.item_upc WHERE t.unique_id=:uniqueId")
LiveData<List<TransactionItem>> getTransactionItemsByUID(@NonNull final String uniqueId);
当我使用唯一的事务ID运行此命令时,无论Transactions
子句如何,查询都会选择upc
中WHERE
相同的所有行。基本上,选择具有不同unique_id
的事务。但是,我只对与unique_id
完全匹配的行感兴趣。
TransactionItem
类的定义如下。
// TransactionItem Model
@Embedded
public ItemModel itemModel;
@Relation(parentColumn = "upc", entityColumn = "item_upc", entity = Transaction.class)
public List<Transaction> transactions;
我花了两天的时间进行谷歌搜索和阅读,但仍然找不到正确的解决方案。我在这里俯瞰什么?
答案 0 :(得分:1)
您告诉通过INNER JOIN获取Transaction和Item,然后通过@Relation JOIN(没有WHERE)获取由Transaction获得的Item的TransactionItem列表。
您要获取“交易”和“项目”而不是“交易项目”列表,因此,TransactionItem不正确。您想要@Embedded Transaction和@Relation与ItemModel一样
@Embedded
public Transaction transaction;
@Relation(parentColumn = "item_upc", entityColumn = "upc", entity = ItemModel.class)
public ItemModel itemModel;
仅猜测1个项目。可以根据需要执行public List<Item> itemModels
。
您使用
@Transaction
@Query("SELECT * FROM Transaction WHERE unique_id=:uniqueId")
LiveData<List<TransactionItem>> getTransactionItemsByUID(@NonNull final String uniqueId);