在我的 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;
}
}
如果这是不可能的,任何人都可以指出我如何解决这个问题。谢谢你。