Android Room:应用与嵌入对象相关的多列

问题描述

在我的 Android 应用中,我使用 Room 来存储数据。我目前面临的问题是,我需要在嵌入对象的 @Relation 中放置 2 列,因为该关系取决于 2 列。见下结构:

@Entity(tableName = "damages")
public class Damage {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private Long id;
    @NonNull
    private Long projectId;
    @NonNull
    private Long codeId;
    private String description;
    ...
}

@Entity(tableName = "damage_codes")
public class DamageCode {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private Long id;
    @NonNull
    private Long projectId;
    @NonNull
    private String name;
    private String description;
    @NonNull
    private String code;
    @NonNull
    private String damageType;
    ...
}

@Entity(tableName = "damage_types")
public class DamageType {
    @PrimaryKey(autoGenerate = true)
    @NonNull
    private Long id;
    @NonNull
    private Long projectId;
    @NonNull
    private String ttype;
    private String description;
    ...
}

public class DamageWithCode {
    @Embedded public Damage damage;
    @Relation(
        entity = DamageCode.class,parentColumn = "codeId",entityColumn = "id"
    )
    public DamageCodeAndType code;
    public Damage getDamage() {
        return damage;
    }
    public DamageCodeAndType getCode() {
        return code;
    }
}

public class DamageCodeAndType {
    @Embedded public DamageCode code;
    @Relation(
        parentColumn = "damageType",entityColumn = "ttype"
    )
    public DamageType damageType;
    public DamageCode getCode() {
        return code;
    }
    public DamageType getDamageType() {
        return damageType;
    }
}

在我的 DamageDAO 中,我有以下方法:

@Transaction
@Query("SELECT * FROM damages WHERE projectId=:projectId")
public List<DamageWithCode> getDamages(Long projectId);
@Query("SELECT * FROM damages WHERE id=:id")
public DamageWithCode getDamage(Long id);

问题:在@Relation 中的DamageCodeAndType 类中,我不仅需要将damageType 指定为parentColumn,还需要指定projectId。此外,在 entityColumn 中,我需要将 projectId 添加到 ttype 列。我怎样才能做到这一点?这样的事情可能吗?

    public class DamageCodeAndType {
    @Embedded public DamageCode code;
    @Relation(
        parentColumn = {"damageType","projectId"},entityColumn = {"ttype","projectId"}
    )
    public DamageType damageType;
    public DamageCode getCode() {
        return code;
    }
    public DamageType getDamageType() {
        return damageType;
    }
}

如果这是不可能的,任何人都可以指出我如何解决这个问题的方向。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)