[英]Query Google App Engine Datastore with Key.Id
我正在向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。
找到解决方案,使用KeyFactory创建一个Key并传入ID。 然后查询密钥。
Key key = KeyFactory.createKey(MyEntity.class.getSimpleName(), id);
根本不需要进行查询,因为数据存储本身支持通过其键获取实体,这比执行查询要快得多。 请参阅文档的此部分 。
在数据存储区开发人员的管理控制台中,您可以这样说:
SELECT * FROM MyEntity WHERE __key__ = Key(MyEntity, 5695872079757312)
您可能在很久以前就已经想到了这一点,但为了其他人的利益,这就是我在JPA中的表现:
entityManager.find(Reply.class, key)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.