使用 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 中的引用在我将它们存储到数据存储并加载时保持 DeadRef
s他们又进来了。
这会成为问题吗?是否有更好的方法来完成此操作?
这似乎是个坏主意,虽然我不知道您会 运行 遇到什么具体问题。
"right answer" 是先保存您的实体。
编辑:另请查看 ofy().defer().save()
的文档,这可以防止您发出大量不必要的保存操作。
我有一个 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 中的引用在我将它们存储到数据存储并加载时保持 DeadRef
s他们又进来了。
这会成为问题吗?是否有更好的方法来完成此操作?
这似乎是个坏主意,虽然我不知道您会 运行 遇到什么具体问题。
"right answer" 是先保存您的实体。
编辑:另请查看 ofy().defer().save()
的文档,这可以防止您发出大量不必要的保存操作。