1

我有一个类似于以下的 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 实体。我对谷歌应用程序如何存储数据以及objectify如何工作都知之甚少。我尝试了许多@Embedded 的组合,但我遇到了很多错误,即

不能将数组或集合属性放在 @Embedded 数组或集合中

谁能告诉我如何定义这些类?非常感谢存储和检索此“根”实体所需的代码片段!

4

1 回答 1

2

@Embedded 集合被转换为低级实体中的一系列集合字段。这就是为什么你只能做一层嵌入。

如果您要一次存储/加载所有数据,并且如果您的实体与示例中的实体一样简单,则可以将列表的 @Serialized 注释放在 @Embedded 列表中。

您可以从此讨论中了解更多信息。

这种方法的问题是您的低级嵌入将无法被索引。

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;
    // ...
}
于 2012-05-06T19:11:39.213 回答