1

Objectify を使用して Google App Engine を使用しています。次の単純化されたセットアップを検討してください。

@Entity
public class UserGroup
{
    @Id
    private String identifier;
}

@Entity
public class User
{
    @Id
    private String username;
    private String password;
    @Parent
    Ref<UserGroup> usergroup;
}

ここで、2 つのユーザー グループ (A と B と呼びましょう) がある場合、ユーザー名が "admin" のユーザー エンティティを最大 3 つ持つことができると仮定しました。親としてユーザーグループを持たないもの。

しかし、そうではありません。グループ A に管理者を作成し、次にグループなしの管理者を作成し、次にグループ B に管理者を作成すると、B に 1 つだけ存在し、他の 2 つが上書きされます。

これは、私には一貫性がないように思えます。B を親エンティティとして指定せずに B にあるものを見つけることはできず、名前として「admin」を指定するだけです。これは、ルートで彼を検索することを意味するためです。しかし、その名前のユーザーをどこかに作成すると、オブジェクト階層内の場所に関係なく、同じ名前のユーザーが上書きされます。

私の質問は:それはなぜですか?

4

2 に答える 2

0

あなたはテストである種の間違いを犯しました。{UserGroupA, "admin"} と {UserGroupB, "admin"} は、実際には別個のキーを持つ別個のエンティティです。

于 2013-03-21T15:57:35.203 に答える
0

キー名を ID として使用して「ユーザー」エンティティを作成すると、データストアにはその ID を持つ一意の「ユーザー」が 1 つだけ存在します。同じキー名を持つユーザーをデータストアに 2 回書き込むと、最初の書き込みはは「挿入」となり、2 番目は「更新」と見なされます。あなたのユースケースでは、IDに自動生成されたKeyオブジェクトを使用し、「ロール」という名前の別のフィールドまたは「管理者」の値を入れる必要があるかもしれません。

于 2013-03-24T08:37:46.630 に答える