1

我在 Google App Engine 上,使用 Objectify。考虑以下简化设置:

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

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

现在我假设如果我有两个用户组(我们称它们为 A 和 B),我最多可以拥有三个用户名为“admin”的用户实体:一个以用户组 A 作为父级,一个以用户组 B 作为父级,一个没有用户组作为父级。

然而,事实并非如此。如果我在 A 组中创建管理员,然后在没有组的情况下创建管理员,然后在 B 组中创建管理员,则只有一个:B 中的一个,它覆盖了其他两个。

在我看来,这似乎是不一致的。如果不将 B 指定为父实体,并且只给出“admin”作为名称,我将无法在 B 中找到那个,因为这意味着在根目录中查找他。但是,如果我在任何地方创建一个具有该名称的用户,它会覆盖具有相同名称的用户,而不管他在对象层次结构中的位置如何。

我的问题是:为什么会这样?

4

2 回答 2

0

你在测试中犯了某种错误。{UserGroupA, "admin"} 和 {UserGroupB, "admin"} 确实是具有不同键的独立实体。

于 2013-03-21T15:57:35.203 回答
0

If you create a "User" entity using a key name as an ID, there will only be one unique "User" in the datastore with that ID : if you write twice a user with the same Key name in the datastore, the first write will be an "insert" and the second will be considered an "update". In your use case maybe you should use an auto generated Key object for the ID, and have another field named "role" or something to put your "admin" value.

于 2013-03-24T08:37:46.630 回答