根据https://developer.android.com/training/data-storage/room/relationships
我们可以有一对多的关系
public class UserWithPlaylists {
@Embedded public User user;
@Relation(
parentColumn = "userId",
entityColumn = "userCreatorId"
)
public List<Playlist> playlists;
}
@Transaction
@Query("SELECT * FROM User")
public List<UserWithPlaylists> getUsersWithPlaylists();
在两个实体中User
and Playlist
,我们添加了一个名为sort_key
目的是,当我们执行查询时,我们可以执行以下操作
@Transaction
@Query("SELECT * FROM User order by sort_key")
public List<UserWithPlaylists> getUsersWithPlaylists();
我们可以控制顺序List<UserWithPlaylists>
.
但是,怎么样List<Playlist> playlists
子实体?
我们如何为子实体定义自定义查询Playlist
,这样我们就可以控制List<Playlist> playlists
订购?
我们如何为子实体播放列表定义自定义查询,以便我们可以控制列表播放列表的排序?
恐怕这里没有开箱即用的方法。
Using @关系你所拥有的注释就是:
5 注释参数 (关联者, entity, 实体列, 父列, 投影。它们都不影响子表项目的顺序)
在关系的引擎盖下,Room 使用两个查询 - 首先,您在 DAO 中显式写入
SELECT * FROM User order by sort_key
另一个 - 用于从子表中获取数据(基于查询结果的类型和@关系参数):
SELECT * FROM PlayList WHERE userCreatorId IN (<List of users id from the first query>)
该查询是自动生成的,您@关系注释没有选项可以更改其中项目的顺序。
当然,在获得这个“无序”结果后,您可以添加一些后处理来手动实现您想要的结果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)