通过Objectify在Datastore中保存递归对象

时间:2018-04-14 12:29:50

标签: google-app-engine objectify datastore

我有一个用例,我必须保存一个递归对象

两个班级:

v

我也将两个对象分别保存在两个不同的表中。 为此,我需要在Item模型的List字段中添加@Ignore 和Option模型中List列表中的@Ignore。

我现在需要一个完整的递归结构,并希望将其保存在另一个表中。 为此,我尝试将@IgnoreSave(IfNull.class)放在Item模型的List字段和Option模型的List字段中。

但是当我在执行上述操作后启动应用程序时,出现了stackoverflow错误。错误是以下类型的错误:

public class Item{

@Id
private Long id;

@Index
private String name;

@Index
private String sku;

@Index
private Long shopId;
@Index
private String imageUrl="";

@Index
private List<Long>optionIds;

private List<Option> options;
}

public class Option{

@Id
private Long id;

@Index
private String name;

@Index
private String sku;

@Index
private Long shopId;
@Index
private String imageUrl="";

@Index
private List<Long>itemIds;

private List<Item> items;
}

我现在被困住,需要帮助很严重。是否存在通过客观化存储递归结构的替代解决方案?

1 个答案:

答案 0 :(得分:1)

看起来您正在尝试保存两个相互引用的不同实体。为此,您应使用Key<?>Ref<?>字段。对于像这样的指针,递归没有问题。

通过指定List<Item>List<Option>,您告诉Objectify您希望在单个实体中递归地嵌入这些内容。 Objectify不支持递归嵌入类(至少,还没有)。