我有一个类似于:
的Java模型public class Country {
@Id private String id;
private CurrencyId currencyId;
private List<Province> provinceList;
...
}
public class Province {
@Id private String id;
private Gobernor gobernorId;
private List<City> cityList;
...
}
public class City {
@Id private String id;
private String name;
...
}
我想使用objectify 存储数据。但是,由于国家/地区数据可能会发生变化,我还希望存储国家/地区数据的存储日期,因此我认为我应该存储以下实体:
public class CountryListEntity {
@Id private String id;
private List<Country> countryList;
private Date storeDate;
}
注意我只有一个具有Id“root”的CountryListEntity实体,如果我可以像那样存储它。我对谷歌应用程序如何存储数据以及对象的工作原理知之甚少。我尝试了许多@Embedded的组合,但是我遇到了很多错误,即
无法在@Embedded数组或集合中放置数组或集合属性
有谁能告诉我如何定义这些类?存储和检索此“根”实体所需的代码片段将非常受欢迎!
答案 0 :(得分:2)
@Embedded集合被转换为一系列的集合字段 低级实体。这就是为什么你可以做的一个级别的嵌入。
如果您要一次存储/加载所有数据,并且如果您的实体与示例中的实体一样简单,则可以在@Embedded列表中为您的列表添加@Serialized注释。
您可以从this discussion了解更多信息。
这种方法的问题在于您的低级嵌入将无法编入索引。
public class CountryListEntity {
@Id private String id;
@Embedded
private List<Country> countryList;
private Date storeDate;
}
public class Country implements Serializable {
private String id;
private CurrencyId currencyId;
@Serialized
private List<Province> provinceList;
// ...
}
public class Province implements Serializable {
private String id;
private Gobernor gobernorId;
@Serialized
private List<City> cityList;
// ...
}
public class City implements Serializable {
private String id;
private String name;
// ...
}