使用Key.Id查询Google App Engine数据存储
我正在将一个简单的Java应用程序部署到Google App Engine。使用Key.Id查询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);
上述不起作用。我知道我可以通过将Key作为参数传递回来,但我想知道是否可以使用long id。
找到解决方案,使用KeyFactory创建一个Key并传入ID。然后在密钥上查询。
Key key = KeyFactory.createKey(MyEntity.class.getSimpleName(), id);
有没有必要做一个查询所有的,因为数据存储本身支持的关键,这比执行查询明显更快获取的实体。请参阅文档this section。
你能帮忙提供一个JPA的例子吗?它看起来像PersistenceManager只适用于JDO。 – user424174 2010-09-03 09:59:14
JPA记录在这里:http://code.google.com/appengine/docs/java/datastore/usingjpa.html – 2010-09-03 14:09:48
感谢尼克,不幸的是,页面并没有告诉我如何使用它的密钥进行提取而不使用查询。 – user424174 2010-09-04 09:36:28
你可能想通了这一点很久以前的事,但对于其他人的利益,这是我要做的事在JPA:
entityManager.find(Reply.class, key)
在数据存储开发者的管理控制台,你可以这样说:
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
重要的是要记住,当使用此方法时,传入的'id'必须是'Long'类型。 – 2013-07-03 11:49:04
任何其他使用'String'的方法? – serj 2015-02-18 21:54:50