【发布时间】: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 是否存在。如果没有,则将信息保存到数据存储区。
然后为了登录,我在 index.jsp 页面上提交信息。它将请求转发到 com.siolabs.tambola.Login.java Login Servlet 检查电子邮件 ID 是否存在,如果存在则将请求转发到 home.jsp 页面。
问题是 login servlet 在更改时始终找不到电子邮件 ID。
谢谢
【问题讨论】:
-
我的问题是关于 google-app-engine。我想我无法让这个问题可以理解。我想问的是为什么当输入相同时生成的密钥每次都不同。此外,如果每次都不同,我怎样才能让它每次都生成相同的密钥,以便我可以直接通过该密钥获取实体。
-
你怎么知道key不一样——你比较过两个不同的值吗?
-
@mattb 是的,我已经比较了这些值。只有最后几个字母是相同的。我也尝试使用电子邮件 ID 生成密钥,然后使用“datastore.get(key)”,每次它给出“EntityNotFoundException”
-
我一直使用相同的代码生成密钥并通过密钥检索实体:它总是返回相同的密钥。您的代码中还有其他问题。将此添加到您的代码以进行故障排除: System.out.println("Created key for: " + key.getId());将其添加到您创建密钥的位置,以及您尝试使用它的位置。您应该在两个地方都获得相同的 id(等于您的电子邮件变量)。
-
@AndreiVolgin 测试。谢谢