Java 使用Key.Id查询Google应用程序引擎数据存储

Java 使用Key.Id查询Google应用程序引擎数据存储,java,google-app-engine,jpa,Java,Google App Engine,Jpa,我正在将一个简单的Java应用程序部署到Google应用程序引擎 我有一个简单的JPA实体,其中包含一个键作为我生成的ID import javax.persistence.*; @Entity public class MyEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private com.google.appengine.api.datastore.Key key;

我正在将一个简单的Java应用程序部署到Google应用程序引擎

我有一个简单的JPA实体,其中包含一个键作为我生成的ID

import javax.persistence.*;    

@Entity
public class MyEntity
{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)    
    private com.google.appengine.api.datastore.Key key;
...
有一次我保存了这个对象。我可以像这样查看钥匙的ID

long id = entity.getKey().getId();
你知道我如何使用相同的Id取回我的实体吗?像这样的

Query query = em.createQuery("SELECT e FROM MyEntity e WHERE e.key.id = :myId");
query.setParameter("myId", id);

上述方法不起作用。我知道我可以通过将密钥作为参数传递回来,但我想知道是否可以使用长id。

找到解决方案,使用KeyFactory创建密钥并传递id。然后查询密钥

Key key = KeyFactory.createKey(MyEntity.class.getSimpleName(), id);

根本不需要执行查询,因为数据存储本机支持通过其键获取实体,这比执行查询快得多。请参阅文档。

您可能早就知道这一点,但为了其他人的利益,我在JPA中就是这样做的:

entityManager.find(Reply.class, key)

在数据存储开发人员的管理控制台中,您可以说:


SELECT*FROM MyEntity WHERE\uuuuu key=key(MyEntity,56958720797757312)

您能提供一个JPA的例子吗?看起来PersistenceManager只适用于JDO.JPA在这里有文档记录:谢谢Nick,不幸的是,该页面没有告诉我如何在不使用查询的情况下使用其键进行获取。使用此方法时,请务必记住传入的
id
必须是
Long
类型。是否还有其他方法可用于
String
id?