Android Room - 具有附加字段的多对多关系

Кир*_*мов 5 database android android-room android-room-relation

我在 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;
}
Run Code Online (Sandbox Code Playgroud)

fra*_*ang 3

我遇到了同样的问题,不可能以直观的方式解决。

我得到的最接近的解决方案是将交叉引用实体(在您的示例中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;
}
Run Code Online (Sandbox Code Playgroud)

然后,在您的代码中,您需要将steakssteaksRefs与您需要的数据映射到另一个对象。