Java Can';无法通过键从数据存储中获取实体

Java Can';无法通过键从数据存储中获取实体,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我试图通过键访问获取实体,但每次尝试获取时都会出现异常 datastore.put(en); String key = en.getKey(); 然后将密钥作为字符串(如4644337115725824)发送到另一个servlet。当我试图通过这个代码获取实体时 Key key = KeyFactory.createKey("User", req.getParameter("key")); Entity en = datastore.get(key); 在最后

我试图通过键访问获取实体,但每次尝试获取时都会出现异常

    datastore.put(en);
    String key = en.getKey();
然后将密钥作为字符串(如4644337115725824)发送到另一个servlet。当我试图通过这个代码获取实体时

    Key key = KeyFactory.createKey("User", req.getParameter("key"));
    Entity en = datastore.get(key);
在最后一行,我有一个EntityNotFoundException和“没有找到与key:User(“4644337115725824”)匹配的实体”
出什么问题了?

我认为密钥可能存在序列化/反序列化问题。要将密钥序列化为websafe字符串,请使用:

稍后,当您想要反序列化另一个servlet上的键时,可以使用:


确保键与数据存储中的键匹配,EntityNotFoundException仅在数据存储
实体中找不到匹配项时才会出现。getKey()
返回一个
键,而不是
字符串
,因此,如果要从该键获取ID以传递给其他servlet,则需要调用
键.getID()
(对于
Long
ID)或
Key.getName()
对于
String
ID。您在数据存储查看器中对此实体看到了什么?抱歉,我忘了告诉您,当发送Key时,会调用Key.getID(),并且只发送ID。但是我认为,()之间的字符串有问题,因为Key.toString()返回种类(数字),而不是您在异常消息中看到的种类(“编号”)。
Key key = entity.getKey();
String serializedKey = KeyFactory.keyToString(key);
Key deserializedKey = KeyFactory.stringToKey(serializedKey);
Entity en = datastore.get(deserializedKey);