使用 Ref 存储值,只要它不在数据存储中

Storing the value with the Ref, as long as it's not in the datastore

我有一个 List<Ref<Entity>>。我将新条目添加到列表中,如下所示:

entities.add(Ref.create(new_entry));
modified.add(new_entry);

当我存储包含列表的实体时,我会存储列表本身以及 modified 列表中的所有实体。这很好用。

问题是,我必须使用 entities-列表,同时向其中添加新条目。这需要多次迭代列表。这里的问题是,列表中的引用指向旧条目(已经在数据存储中)和新条目(not 尚未在数据存储中)。

这导致 Ref.get()-方法对列表中所有尚未存储的条目(仍在 modified-列表中的条目)return null ).

我在插入时通过这样做解决了这个问题:

Ref<T> ref = new DeadRef<>(
        Key.create(data),
        data
);
this.entities.add(ref);
this.modified.add(data);

这样,我可以在一个列表中混合存储和未存储的条目,并且Ref.get()总是return一个值。

这有效,但我注意到 entities-list 中的引用在我将它们存储到数据存储并加载时保持 DeadRefs他们又进来了。

这会成为问题吗?是否有更好的方法来完成此操作?

这似乎是个坏主意,虽然我不知道您会 运行 遇到什么具体问题。

"right answer" 是先保存您的实体。

编辑:另请查看 ofy().defer().save() 的文档,这可以防止您发出大量不必要的保存操作。