【发布时间】:2022-06-16 04:27:47
【问题描述】:
我有一个表 Messages (PrimaryKey messageId) 和一个表 ReadUpdates。每条消息都有许多与
相关的 ReadUpdates我想用下面的 sql 查询 Room 数据库,并得到一个 key=Message 和 value=List 的 Map
@Query(
"""
Select * from messages
inner join readUpdates on messages.messages_message_id = readUpdates.read_upd_message_id
where messages.messages_message_id = :messageId
and messages.messages_server_id = :serverId
"""
)
fun getMessageRecipients(
serverId: Long,
messageId: String
): LiveData<Map<Message, List<ReadUpdateAccount>>>
ReadUpdateAccount 是加入 ReadUpdate 和 Account 的模型
data class ReadUpdateAccount(
@Embedded
val readUpdate: ReadUpdate,
@Relation(entity = Account::class, parentColumn = "read_upd_connection_id", entityColumn = "accounts_account_id")
val account: Account?
)
调试查询后,我看到的不是示例
我有
,
显然,我需要第一个,但我得到了第二个 为什么会发生这种情况,我该如何解决?
【问题讨论】:
-
相信kulukimaki here的解决方案会对你有所帮助
-
我不知道 Room,但这就是关系数据库的工作方式——通过加入我们创建一个包含重复项目的平面列表。你需要一些聚合操作,但我不确定 Room 是否支持这样的东西。
-
不,我以前也这样做过。我不知道为什么会发生这种情况
标签: android kotlin android-room android-room-relation