You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin Room一对多关联场景如何通过SQL实现关联列表按createdAt排序

一、默认排序规则

Room的@Relation注解默认未指定排序逻辑,底层会先执行你写的User查询,再自动生成一条SELECT * FROM Playlist WHERE userCreatorId IN (查询到的所有userId) 语句获取关联的播放列表。
这条自动生成的语句不带ORDER BY子句,此时SQLite会默认按Playlist表的主键(play_list_id)升序返回结果,但该行为是SQLite的底层实现决定的,不属于Room的规范承诺,不建议业务逻辑依赖默认排序。

二、Dao层实现按createdAt排序的方法

最简单的方案是直接用@Relation自带的sortBy参数指定排序规则,不需要修改原有的Dao查询语句:

data class UserWithPlaylists(
    @Embedded val user: User,
    @Relation(
          parentColumn = "userId",
          entityColumn = "userCreatorId",
          // 注意:sortBy填数据库列名,不是实体类属性名,DESC代表倒序,升序可省略DESC
          sortBy = "created_at DESC"
    )
    val playlists: List<Playlist>
)

Room生成代码时会自动在关联查询Playlist的语句中加上ORDER BY created_at DESC,返回的playlists列表就会按创建时间倒序排列。

如果需要动态调整排序规则,也可以手动写联合查询+自定义映射逻辑,但绝大多数场景下上述sortBy参数的方案足够使用,性能和原生查询一致。


内容的提问来源于stack exchange,提问作者William Hu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 08:15:02