0

我正面临这种情况:我有三个实体(EntA、EntB 和 EntC) EntA 和 EntB 有一个 Key<EntC> 参数。EntC 也有一个 List<String> 参数,它将 EntA 和 EntB 的键保存为字符串。

为了获得任何实体的密钥,我首先必须保留它们(id 字段是自动生成的)。所以我这样做:

  1. 创建并保存 EntC,这将为 EntA 和 EntB 创建我需要的 Key<EntC> 值。
  2. 我使用 Key< EntC> 创建 EntA 和 EntB 并保存它们。
  3. 通过将 Key<EntA> 和 Key<EntC> 添加到相应的列表来更新 EntC。我发现实体没有在 DS 中更新,而是重新编写。所以,我首先获取 EntC,获取它的 id,我用它来创建一个包含 Key<EntA> 和 Key<EntB> 的新 EntC 实体。最后,我删除了原来的 EntC 并保存了新的 EntC。

我想知道是否有更好的方法来实现这一点。此外,在我删除原始 EntC 实体之后和保存新的 EntC 实体之前,是否有可能另一个实体获得了原始 EntC 实体的 id?

4

1 回答 1

0

提前分配id:

例如,与父母一起做:

Key<YourEntity> k=  dao.fact().allocateId(parentObj, YourEntity.class);
(obviously dao extends DAOBase, I think you know that from using objectify)


 allocateId(java.lang.Class<T> clazz) 
       Allocates a single id from the allocator for the specified kind.


 allocateId(java.lang.Object parentKeyOrEntity, java.lang.Class<T> clazz) 
      Allocates a single id from the allocator for the specified kind.

http://objectify-appengine.googlecode.com/svn/trunk/javadoc/com/googlecode/objectify/ObjectifyFactory.html

于 2012-06-08T02:50:43.220 回答