Android Room - 带有附加字段的多对多关系
Posted
技术标签:
【中文标题】Android Room - 带有附加字段的多对多关系【英文标题】:Android Room - Many to Many Relation with additional field 【发布时间】:2021-07-13 05:55:09 【问题描述】:我在 Room 数据库上设置了多对多关系,如下图所示:
我想在“CrossRef”表中添加额外的字段。我的问题是如何让 DateWithSteaks 从“CrossRef”表中获取这个“isCompleted”变量?
@Entity
public class Steak
@PrimaryKey(autoGenerate = true)
public int id;
public String title;
@Entity
public class Date
@PrimaryKey
public long date;
public Date()
date = new LocalDate().toDate().getTime();
@Entity(primaryKeys = "date", "id")
public class DateSteakCrossRef
public long date;
public int id;
public boolean isCompleted;
public class DateWithSteaks
@Embedded Date date;
@Relation(
parentColumn = "date",
entityColumn = "id",
associateBy = @Junction(DateSteakCrossRef.class)
)
public List<Steak> steaks;
【问题讨论】:
你有没有找到任何合适的解决方案来解决这个问题? 【参考方案1】:我遇到了同样的问题,无法通过直观的方式解决。
我得到的最接近解决方案的方法是将交叉引用实体(在您的示例 DateSteakCrossRef
中)作为一对多关系添加到结果对象 (DateWithSteaks
) 中。
不是最好的事情,但至少你可以在一次事务中获取所有数据。
类似这样的:
public class DateWithSteaks
@Embedded Date date;
@Relation(
parentColumn = "date",
entityColumn = "id",
associateBy = @Junction(DateSteakCrossRef.class)
)
public List<Steak> steaks;
@Relation(
parentColumn = "id", // id of your Date clase
entityColumn = "id" // id of your DateSteakCrossRef class
)
public List<DateSteakCrossRef> steaksRefs;
然后,在您的代码中,您需要匹配 steaks
和 steaksRefs
以映射到具有您需要的数据的另一个对象。
【讨论】:
以上是关于Android Room - 带有附加字段的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章