Che*_*eng 7 java android android-room
根据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();
Run Code Online (Sandbox Code Playgroud)
在 entityUser和 中Playlist,我们添加了一个名为的列sort_key
目的是,当我们执行查询时,我们可以做到以下几点
@Transaction
@Query("SELECT * FROM User order by sort_key")
public List<UserWithPlaylists> getUsersWithPlaylists();
Run Code Online (Sandbox Code Playgroud)
我们可以控制 的顺序List<UserWithPlaylists>。
但是,List<Playlist> playlists子实体呢?
我们如何为子实体定义自定义查询Playlist,以便我们可以控制List<Playlist> playlists排序?
我们如何为子实体播放列表定义自定义查询,以便我们可以控制列表播放列表的排序?
恐怕这里没有开箱即用的方法。
使用@Relation注释,您所拥有的只是:
5个注解参数(associateBy,entity,entityColumn,parentColumn,projection。它们都不影响子表项的顺序)
在关系的引擎盖下 Room 使用两个查询 - 首先你明确地写在你的 DAO 中
SELECT * FROM User order by sort_key
Run Code Online (Sandbox Code Playgroud)
另一个 - 用于从子表中获取数据(基于查询结果的类型和@Relation参数):
SELECT * FROM PlayList WHERE userCreatorId IN (<List of users id from the first query>)
Run Code Online (Sandbox Code Playgroud)
此查询是自动生成的,您的@Relation注释无法更改其中项目的顺序。
当然,在得到这个“无序”结果后,你可以添加一些后处理来手动实现你想要的
| 归档时间: |
|
| 查看次数: |
507 次 |
| 最近记录: |