使用一对多关系时,有没有办法控制子实体的顺序?

2023-11-23

根据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(使用前将#替换为@)

使用一对多关系时,有没有办法控制子实体的顺序? 的相关文章

随机推荐