【发布时间】:2014-07-16 11:00:23
【问题描述】:
我正在尝试通过密钥访问获取实体,但每次尝试获取它时都会遇到异常。
datastore.put(en);
String key = en.getKey();
然后将密钥作为字符串发送到另一个 servlet,例如 4644337115725824。当我尝试通过此代码获取实体时
Key key = KeyFactory.createKey("User", req.getParameter("key"));
Entity en = datastore.get(key);
在最后一行我有一个 EntityNotFoundException 并且“没有找到与键匹配的实体:用户(“4644337115725824”)' 怎么了?
【问题讨论】:
-
确保key与Datastore中的key匹配,EntityNotFoundException仅在datastore中找不到匹配项时出现
-
Entity.getKey()返回一个Key,而不是String,所以如果你想从Key中获取ID传递给你的其他servlet,你需要调用Key.getID()(对于LongID)或Key.getName()用于StringID。您在该实体的数据存储查看器中看到了什么? -
对不起,我忘了告诉当发送密钥时,会调用 Key.getID(),并且只发送 ID。但我认为,() 之间的字符串有问题,因为 Key.toString() 返回的是 Kind(number),而不是 Kind("number"),正如您在 Exception 消息中看到的那样。
标签: java google-app-engine google-cloud-datastore