java - KeyFactory.createKey()这是在数据存储区中存储数据的正确方法吗

原文 标签 java google-app-engine google-cloud-datastore

每个用户可以有很多问题。问题只能有一个用户。以下正确吗

Key questionKey = KeyFactory.createKey("Questions", userId);
Entity questionEntity = new Entity("Question", questionKey);
questionEntity.setProperty("questionCategory", questionCategory);
...

最佳答案

给定的用法是错误的。对于这个问题,您正在使用kind和userid创建密钥。这意味着对应的实体是Kind="Questions"id=userid且没有父对象。这是错误的,一旦用户遇到多个问题,您将开始出错,因为他们都拥有相同的密钥。

理想情况下,您需要的是对于一个问题实体,将其类型声明为问题,并将父级声明为用户,如下所示:

1,如果对问题使用手动生成的ID或名称,则:

Key questionKey = KeyFactory.createKey(userkey, "Questions", questionidorname);


2,如果使用App Engine的自动生成ID,则无需创建密钥,而是将实体创建为:

Entity questionEntity = new Entity("Questions",
      userkey)


这里的userkey是用户实体的密钥

相关文章:

java - 在.net上移植hbase

java - 在HttpSession中存储关键数据是否安全?

google-app-engine - Golang GAE - 结构中的intID for mustache

google-app-engine - App Engine:如果不存在则创建唯一实体的机制

java - 如何在顶部显示特定的recyclerview项目?

java - Fruchterman和Reingold算法顶点在输出中占据相同的位置(图形布局)

java - eclipse创建扩展ActionBarActivity而不是活动

python - 如何在GAE cron作业中执行需要OAuth的操作?

java - 在Google App Engine中添加过滤器查询

python - AppEngine“明确取消”错误