【发布时间】:2017-11-27 22:18:08
【问题描述】:
基本上,有两件事我不明白:带有对象的对象和带有对象列表的对象
假设我从服务器收到一个对象列表。他们每个人看起来像这样:
@Entity
public class BigObject {
@PrimaryKey
private int id;
private User user;
private List<SmallObject> smallObjects;
}
将这两个对象作为字段:
@Entity
public class User {
@PrimaryKey
private int id;
private String name;
@TypeConverters(GenderConverter.class)
public MyEnums.Gender gender;
}
@Entity
public class SmallObject {
@PrimaryKey (autoGenerate = true)
private int id;
private String smallValue;
}
它们比这更复杂,所以我不能像 Room 建议的那样使用 @TypeConverters:
error: Cannot figure out how to save this field into database. You can consider adding a type converter for it.
如何在 Room 中存储这个数据结构?
【问题讨论】:
-
一般情况下,实体不会单独或以列表的形式在 Room 中保存其他实体。他们可能持有其他实体的外键。而其他结构,如视图模型,可以容纳任何需要的实体。所以,
BigObject需要去掉smallObjects并用userId替换user作为外键。User和SmallObject会将外键返回到BigObject。然后,设置一个视图模型或您从@QueryDAO 方法填充的东西,该方法检索BigObject、其相关的User及其相关的SmallObjects。
标签: android android-room