使用Key.Id查询Google App Engine数据存储区

时间:2010-09-02 21:32:24

标签: java google-app-engine jpa

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

我有一个简单的JPA实体,其中包含一个Key作为我生成的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);

以上不起作用。我知道我可以通过传入Key作为参数来获取它,但我想知道我是否可以使用long id。

4 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:0)

你可能在很久以前就已经想到了这一点,但是为了别人的利益,这就是我在JPA中的表现:

entityManager.find(Reply.class, key)

答案 3 :(得分:0)

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

SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)