使用Key.Id查询Google App Engine Datastore

4

我正在将一个简单的Java应用程序部署到Google App Engine。

我有一个简单的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代替。

4个回答

11

找到了解决方案,使用KeyFactory创建一个键并传入ID。然后根据Key查询。

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

1
使用此方法时,重要的是要记住传递的“id”必须是“Long”类型。 - James Sheils
还有其他使用 String id 的方法吗? - serj

5

完全没有必要执行查询操作,因为数据存储区原生支持通过实体键获取实体,这比执行查询要快得多。请参阅文档中的此部分


你能提供一个JPA的例子吗?看起来PersistenceManager只适用于JDO。 - StackEng2010
JPA的文档在这里:http://code.google.com/appengine/docs/java/datastore/usingjpa.html - Nick Johnson
谢谢Nick,不幸的是那个页面没有告诉我如何在不使用查询的情况下使用其键进行获取。 - StackEng2010

0

你可能早就想到了,但为了其他人的利益,这是我在JPA中的做法:

entityManager.find(Reply.class, key)

0
在数据存储开发者管理控制台中,您可以这样说: < p > < code > SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接