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

Saving a recursive object in Datastore via Objectify

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

两个 类 :

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;
}

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

我现在需要一个完整的递归结构,并想将其保存在另一个 table 中。 为此,我尝试通过将 @IgnoreSave(IfNull.class) 放在 Item 模型的 List 字段和 Option 模型的 List 字段上来尝试破解。

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

java.lang.WhosebugError
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.annotation.AnnotationInvocationHandler.getMemberMethods(AnnotationInvocationHandler.java:284)
at sun.reflect.annotation.AnnotationInvocationHandler.equalsImpl(AnnotationInvocationHandler.java:196)
at sun.reflect.annotation.AnnotationInvocationHandler.invoke(AnnotationInvocationHandler.java:63)
at com.sun.proxy.$Proxy9.equals(Unknown Source)
at java.util.Arrays.equals(Arrays.java:1869)
at com.googlecode.objectify.impl.translate.TypeKey.equals(TypeKey.java:60)
at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:996)
at com.googlecode.objectify.impl.translate.Translators.get(Translators.java:115)
at com.googlecode.objectify.impl.translate.CreateContext.getTranslator(CreateContext.java:27)
at com.googlecode.objectify.impl.KeyMetadata.findKeyFields(KeyMetadata.java:78)
at com.googlecode.objectify.impl.KeyMetadata.<init>(KeyMetadata.java:50)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEntityClassTranslator(ClassTranslatorFactory.java:64)

我现在被困住了,急需帮助。是否有通过 objectify 存储递归结构的替代解决方案?

您似乎在尝试保存两个相互引用的不同实体。为此,您应该使用 Key<?>Ref<?> 字段。这样的指针递归没问题

通过指定 List<Item>List<Option>,您告诉 Objectify 您想要 嵌入 这些东西递归到一个实体中。 Objectify 不支持递归嵌入 类(至少,现在还没有)。