Objectify 5 保存嵌入的列表列表或数组数组?

Objectify 5 save an embedded List of List or array of arrays?

我正在将代码从 objectify 4 转换为 5。

之前我保存的 @Entity 包含一个 class 包含

List<List<String>> listOfListOfStrings;

对于版本 5,我得到一个 SaveException:

com.googlecode.objectify.SaveException: 
Error saving com.timmacp.server.OfyEntityClass@3d627804: 
listOfListOfStrings: java.util.ArrayList is not a supported property type`

数组的数组也有同样的问题。

这是我用来测试的一些代码,MemberClass 只包含一个 String.

@Entity
public class OfyEntityClass {
    @Id
    private Long ID;
    List<List<MemberClass>> memberClassObjects;
    public OfyEntityClass(){
        memberClassObjects=new ArrayList<List<MemberClass>>(8);
        List<MemberClass> l=new ArrayList<MemberClass>(8);
        MemberClass memberClassObject=new MemberClass();
        l.add(memberClassObject);
        memberClassObjects.add(l);
    }
}

解决方法似乎是将每个 List 级别放在自己的 class 中,但这似乎很奇怪,因为 docs 声明 "Many limitations of Objectify4 no longer apply to Objectify5: Nesting of collections of embedded objects is unrestricted."

更新:部分字段在ofy4版本中被注释为@Serialize。我删除了这些认为它们在 ofy5 中不需要的东西,这样就解释了差异。仍然想知道是否可以在没有 @Serialize 的情况下做到这一点。包装器 classes 似乎可以模拟 List<List<String> 但不适用于更复杂的嵌套。

更新 2: 使用 v5,不能使用递归 class?即如果 Thing 有一个类型的字段 List<Thing> 然后(到目前为止)注册失败:堆栈跟踪看起来像无限重复:

    at com.googlecode.objectify.impl.translate.Translators.create(Translators.java:138)
at com.googlecode.objectify.impl.translate.Translators.get(Translators.java:117)
at com.googlecode.objectify.impl.translate.CreateContext.getTranslator(CreateContext.java:27)
at com.googlecode.objectify.impl.translate.CollectionTranslatorFactory.create(CollectionTranslatorFactory.java:38)
at com.googlecode.objectify.impl.translate.Translators.create(Translators.java:138)
at com.googlecode.objectify.impl.translate.Translators.get(Translators.java:117)
at com.googlecode.objectify.impl.translate.CreateContext.getTranslator(CreateContext.java:27)
at com.googlecode.objectify.impl.translate.ClassPopulator.<init>(ClassPopulator.java:88)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.createEmbeddedClassTranslator(ClassTranslatorFactory.java:75)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:50)
at com.googlecode.objectify.impl.translate.ClassTranslatorFactory.create(ClassTranslatorFactory.java:36)

或者也许有一种方法可以为翻译器指定递归级别的数量?

这里是 Objectify 的主要作者。

Objectify4 应该无法保存 List<List<String>> 类型的字段。我什至无法想象那会做什么,或者为什么会起作用。周围没有测试。从历史上看,GAE 只允许在实体中存储一个简单的标量值集合。在某些时候,他们通过提供 EmbeddedEntity 来扩展它,但这是不同的。我没有尝试用低级 api 手动存储 List<List<String>>,但如果它有效,那是 Google 尚未宣布也没有记录的新事物。在 GAE/Python(db 或 ndb)中似乎也没有任何方法可以定义这样的结构。

所以我不知道该告诉你什么。如果您告诉我您有一个 working 应用程序可以存储和检索 List<List<String>> 字段 - 那么这就是新事物。您部署了多长时间?