0

私はこのシナリオに直面しています: 3 つのエンティティ (EntA、EntB、および EntC) があり、EntA と EntB には Key< EntC> パラメーターがあります。また、EntC には、EntA と EntB のキーを文字列として保持する List< String> パラメータがあります。

エンティティのいずれかのキーを取得するには、まずそれらを永続化する必要があります (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 に答える