【问题标题】:Why the Key generated is always different even when the string to generate key is same in appengine?即使在appengine中生成密钥的字符串相同,为什么生成的密钥总是不同的?
【发布时间】:2012-09-10 17:37:08
【问题描述】:

我是 google-app-engine 的新手,在开发测试应用程序的过程中遇到了一个问题。 我正在使用用户的电子邮件 ID 生成密钥以保存用户实体。

Key key = KeyFactory.createKey("email",email );

现在在看到数据存储查看器时,大部分密钥都是相同的,只是密钥的最后几个字母发生了变化,即使我提供相同的电子邮件 ID 来生成密钥也是如此。

其实我是希望使用代码通过key获取用户实体。

Entity user = datastore.get(key);

但由于密钥与以前不同,我得到 noEntityFoundException

我想问的是为什么当输入相同时生成的密钥每次都不一样。

另外,如果每次都不同,我怎样才能让它每次都生成相同的密钥,以便我可以直接通过该密钥获取实体?

更多说明:这里是code index.jsp 是欢迎文件。我创建了一个具有电子邮件 ID 的用户,例如:abc@example.com。 这会将表单详细信息发送到

com.siolabs.tambola.Createuser.java

Createuser servlet 检查电子邮件 ID 是否存在。如果没有,则将信息保存到数据存储区。

createUser code here

然后为了登录,我在 index.jsp 页面上提交信息。它将请求转发到 com.siolabs.tambola.Login.java Login Servlet 检查电子邮件 ID 是否存在,如果存在则将请求转发到 home.jsp 页面。

login servlet code

问题是 login servlet 在更改时始终找不到电子邮件 ID。

谢谢

【问题讨论】:

  • 我的问题是关于 google-app-engine。我想我无法让这个问题可以理解。我想问的是为什么当输入相同时生成的密钥每次都不同。此外,如果每次都不同,我怎样才能让它每次都生成相同的密钥,以便我可以直接通过该密钥获取实体。
  • 你怎么知道key不一样——你比较过两个不同的值吗?
  • @mattb 是的,我已经比较了这些值。只有最后几个字母是相同的。我也尝试使用电子邮件 ID 生成密钥,然后使用“datastore.get(key)”,每次它给出“EntityNotFoundException”
  • 我一直使用相同的代码生成密钥并通过密钥检索实体:它总是返回相同的密钥。您的代码中还有其他问题。将此添加到您的代码以进行故障排除: System.out.println("Created key for: " + key.getId());将其添加到您创建密钥的位置,以及您尝试使用它的位置。您应该在两个地方都获得相同的 id(等于您的电子邮件变量)。
  • @AndreiVolgin 测试。谢谢

标签: java google-app-engine


【解决方案1】:

createKey 函数接受两个字符串。

Key key = KeyFactory.createKey("email",email);

您确定第二个电子邮件参数是字符串吗?很可能是其他类型被错误地转换为字符串。

【讨论】:

  • 是的,用 instanceOf() 检查。它是一个字符串。 :-(
猜你喜欢
  • 2012-08-02
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多