0

Google アプリ エンジンを少し試していますが、トランザクション フレームワークが不足しています。できる限りうまく実装していますが、同じ例外に何度も遭遇しています。単一のトランザクションで複数のエンティティ グループを操作することはできません。両方の要素が見つかりました... ドキュメント(http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html#Entity_Groups_Ancestors_and_Paths)を読みましたが、彼らが何を意味しているのか理解できないようです。基本的に私がやろうとしていることはこれです:

オブジェクトのリストがあります。それらがすでにデータベースにあるかどうかを確認したい。等しい場合は等しいかどうかを確認し、等しくない場合はマネージド インスタンスを更新します。そうでなければ、エンティティを永続化します。オブジェクト (まだ永続化されていないオブジェクト) のループでは、EntityMananger.find() を使用して ID でエンティティを検索します。2回目はエラーになります。

私は spring/hibernate(JPA) または EJB3 環境での作業に慣れていますが、これまで見たことがありません。同じトランザクションで同じタイプの 2 つのエンティティを検索できない理由を簡単に説明してもらえますか?

方法を探すのではなく、理由を探す...

4

2 に答える 2

2

エンティティ グループは単純な概念です。App Engine のエンティティには祖先があります。たとえば、Books と Authors をモデル化できます。

Author: name->X と Author: name->Y は、Author KIND の 2 つのエンティティです。Book はもう 1 つの KIND です (KIND は単なるエンティティの論理グループです)。Books と Authors の関係は、祖先と子の関係としてモデル化できます。

例えば

本: name->B1、B2 は Author: name->X によって書かれた可能性があります。したがって、それらを次のようにモデル化しました。

Author: name->X は両方の Book: name->B1、B2 の親です。同様に、Book: name->B3 は Author: name->Y によって書かれているため、Author:name->Y が Book:name->B3 の親であるため、その関係をモデル化できます。

書籍類でお取引する場合、B1、B3、B3をまとめて取引することはできません。彼らは異なる先祖と子の関係に参加しているので. すべての祖先と子の関係はエンティティ グループです。一度に 1 つのエンティティ グループのみを「ロック」できます。

これで物事が少し明確になることを願っています。

于 2010-08-03T21:36:48.787 に答える
0

私の記憶では、GAE データストアはエンティティを階層に基づいて自動的にグループ化します。たとえば、ユーザーの概念があり、他のすべてのオブジェクト タイプ (電子メール メッセージ、連絡先など) にユーザーを親関係として持たせる場合、GAE データストアはそれらすべてを親関係の一部と見なします。同じグループ。特定のユーザーに関連するデータが特定の場所から大量に引き出されているように思われる場合、Google はそのデータをその場所に近いファームに自動的に移動して、データ取得速度を最適化できます。

問題は、これは、すべてのエンティティを主な親エンティティに結び付けるか、異なる親エンティティに結び付けられたオブジェクト間でトランザクションを実行することを避ける必要があることを意味することです。これは大したことではない場合もあります。あるユーザー アカウントから別のユーザー アカウントに連絡先を移動することは、Gmail でのアトミック トランザクションとして期待されるようなことではありません。それ以外の場合、それは本当のドラッグになる可能性があります。

于 2010-08-03T21:34:47.293 に答える