为什么Google会对数据存储区允许重复的ID /名称?管理这个的最佳做法是什么?

时间:2016-01-03 06:37:12

标签: java google-app-engine google-cloud-datastore

好的,现在看到这段代码

public void insertUser1(){
   public static Key personKey=KeyFactory.createKey("Person", "PersonName");
   Entity userEntity=new Entity("User", "User1", personKey);
   userEntity.setProperty("FirstName","Tom");
   datastore.put(userEntity);
}

运行insertUser1();后,您可以在数据存储区中看到它

ID/Name - FirstName
User1     - Tom

现在,我想修改user1的firstname,但这次我使用了这段代码

public void modifyUser1(){
   Entity userEntity=new Entity("User", "User1");
   userEntity.setProperty("FirstName","Mary");
   datastore.put(userEntity);
}

现在,再次检查数据存储区,我可以看到2个条目:

ID/Name - FirstName
User1     - Tom
User1     - Mary

为什么Google会让数据存储区允许重复的ID /名称?管理此问题的最佳做法是什么?

1 个答案:

答案 0 :(得分:3)

第一个有父母,第二个没有。

public static Key personKey=KeyFactory.createKey("Person", "PersonName");
Entity userEntity=new Entity("User", "User1", personKey);

标识为Key(Key(Person,PersonName), User, User1)

但是这个:

new Entity("User", "User1");

只是Key(User, User1)。所以它是不同的ID。

基本上它的实体 Key 每个数据库都是唯一的,它由 Parent Id (或空)和 Entity Id 组成

详细了解实体父母:https://cloud.google.com/appengine/docs/java/datastore/#Java_Ancestor_paths