Skip to content
阅读进度

如何在 Room 中实现一对多或 Many-to-Many 关系映射? ​

返回 数据与搜索 目录

标准回答 ​

一对多:子表保存父表主键,结果对象通过 @Embedded 父对象和 @Relation(parentColumn, entityColumn) 关联子列表。多对多:增加含两边主键的关联表,使用 @Relation 的 associateBy=@Junction 描述连接。

**一致性与约束:**跨多次查询组装关系时使用 @Transaction 保证读取一致;外键约束和索引要在实体设计中另行定义,@Relation 本身不自动替你建立数据库外键。

通俗例子 ​

一个歌单有多首歌,一首歌也能在多个歌单里,可用歌单表、歌曲表和中间关系表连接,关联查询需要考虑一致性。

深入解释 ​

**关系怎样存下来:**一对多常由子表保存父记录 ID;多对多增加关联表,例如 playlist_song 同时保存播放列表 ID 和歌曲 ID。关联表表达的是关系本身。

**查询关系要注意什么:**一次读取对象及关联数据可能涉及多个查询,需要一致快照时放在事务中。Room 的关系映射不自动代替数据库外键约束,两者用途不同。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。