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

Room Library中为Transaction与Person表建立关联的问题咨询

问题1:该关联是否属于一对一关系

关联的类型由你的实际业务规则决定,和字段本身没有强制绑定关系:

  • 若你的业务要求1个Person仅能关联唯一1笔Transaction,同时1笔Transaction仅对应唯一1个Person,那该关联就是一对一关系。不过你当前的字段设计存在冗余:不需要两个类都存对方的关联字段,仅需在其中一方保存另一方的主键作为外键即可,比如只在Person类中保留TransactionId关联Transaction类的主键id,或者只在Transaction类中保留traderID关联Person类的主键id,避免后续更新数据时出现两边关联字段不一致的问题。
  • 若你的业务允许1个Person对应多笔Transaction,那该关联就是一对多关系,仅需在Transaction类中保留traderID关联Person的主键id即可。

如果要实现Room层面的关联查询,你可以额外创建一个组合POJO类来封装关联数据,示例如下:

// 一对一查询Person+对应Transaction的示例POJO
public class PersonWithTransaction {
    @Embedded
    public Person person;
    @Relation(
         parentColumn = "TransactionId",
         entityColumn = "id"
    )
    public Transaction transaction;
}

问题2:是否需要为每个类分别创建对应的Dao

建议为每个Entity单独创建对应的Dao,这是Room开发的最佳实践:

  • 每个Dao仅负责对应单表的增删改查操作,符合单一职责原则,代码逻辑更清晰,后续维护、排查问题也更方便。
  • 如果你需要做跨表的关联查询,只需要在任意一个关联表的Dao中添加对应的查询方法即可,不需要额外创建专门的关联Dao,示例如下:
// 在PersonDao中添加关联查询方法
@Transaction
@Query("SELECT * FROM Person WHERE id = :personId")
PersonWithTransaction getPersonWithTransaction(long personId);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:54:04