在Room 2.4中,DAO 中有一个称为关系查询方法的新功能,您可以编写自定义查询以从 2 个实体中选择列,并且 Room 可以聚合成Map<TableA, List<TableB>>
返回类型。
我有一个相当复杂的查询,它确实与嵌套查询左连接以返回火车站地图及其相关铁路线(多对多关系)。我试图让一个@Query
方法返回Flow<Map<RailStation, List<RailLine>>>
,它可以返回我想要的地图。
现在,我想更进一步让它返回 page 3's PagingSource
。由于原来的类型是 a Map
,所以我想我应该把分页@Query
方法设为PagingSource<Int, Map.Entry<RailStation, List<RailLine>>>
。(Map.Entry
应该是单个列表项的代表类型,而不是Map
代表整个查询结果。)但是,Room 注释处理器抱怨这一行说它无法处理这种类型:
[ksp] RailStationDao.kt:130: Not sure how to convert a Cursor to this method's return type (androidx.paging.PagingSource<java.lang.Integer, java.util.Map.Entry<RailStation, java.util.List<RailLine>>>).
所以我的问题是:Room 注释处理器和 Paging 3 是否支持使用 paging 3 的关系查询方法?如果没有,是否有其他方法可以归档相同的目标?似乎@Relation
Room 中的注解只能支持简单的表连接,但我的情况是我需要在LEFT JOIN
子句中编写嵌套查询。