私のグーグルアプリアプリケーションでは、ユーザーがいくつかの契約を購入するたびに、これらのイベントが実行されます(わかりやすくするために簡略化されています)。
- user.cashが減少します
- user.contractsは数だけ増加します
- Contracts.current_priceが更新されます。
- market.no_of_transactionsが1増加します。
rdmsでは、これらは同じトランザクション内に配置されます。Googleデータストアでは、複数のモデルのエンティティを同じトランザクションに含めることはできないと思います。
この問題への正しいアプローチは何ですか?書き込みが失敗した場合に、先行するすべての書き込みがロールバックされるようにするにはどうすればよいですか?
編集:私は明らかにエンティティグループを見逃しました。今、私はそれらがどのように使用されるかに関するいくつかのさらなる情報をいただければ幸いです。明確にするもう1つのポイントは、「トランザクションに必要な場合にのみエンティティグループを使用する。エンティティ間のその他の関係については、クエリで使用できるReferencePropertyプロパティとキー値を使用する」ということです。参照プロパティ(クエリを実行する必要があるため)と親子関係(トランザクションの場合)の両方を定義する必要があるということですか?
編集2:そして最後に、エンティティが2つの親の間にn対nの関係を確立するために作成されている場合、エンティティの2つの親をどのように定義しますか?