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

时间:2015-02-27 14:41:19

标签: google-app-engine google-cloud-datastore objectify

我有List<Ref<Entity>>。我将新条目添加到列表中:

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

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

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

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

我在插入时执行此操作:

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

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

这有效,但我注意到entities - 列表中的引用 DeadRef,当我将它们存储到数据存储区并再次加载时。< / p>

这会有问题吗?是否有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:1)

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

“正确答案”是首先保存您的实体。

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