外观
如何在 Room 中实现一对多或 Many-to-Many 关系映射?
标准回答
一对多:子表保存父表主键,结果对象通过 @Embedded 父对象和 @Relation(parentColumn, entityColumn) 关联子列表。多对多:增加含两边主键的关联表,使用 @Relation 的 associateBy=@Junction 描述连接。
**一致性与约束:**跨多次查询组装关系时使用 @Transaction 保证读取一致;外键约束和索引要在实体设计中另行定义,@Relation 本身不自动替你建立数据库外键。
通俗例子
一个歌单有多首歌,一首歌也能在多个歌单里,可用歌单表、歌曲表和中间关系表连接,关联查询需要考虑一致性。
深入解释
**关系怎样存下来:**一对多常由子表保存父记录 ID;多对多增加关联表,例如 playlist_song 同时保存播放列表 ID 和歌曲 ID。关联表表达的是关系本身。
**查询关系要注意什么:**一次读取对象及关联数据可能涉及多个查询,需要一致快照时放在事务中。Room 的关系映射不自动代替数据库外键约束,两者用途不同。
内容来源
- Android · AI Agent 知识手册 · 原条目
5.2.2