Google App Engine - 推荐的ID查询方法

时间:2013-10-31 14:59:10

标签: google-app-engine jpa google-cloud-datastore

任何人都可以推荐更好的方法来通过GAE HRD数据存储中的多个ID查询实体吗?

1

mgr = getEntityManager();           
Query dbQuery = mgr.createQuery("SELECT FROM CustomEntity as CustomEntity WHERE id IN (:ids)");
dbQuery.setParameter("ids", results.getIds());
return (List<CustomEntity>) dbQuery.getResultList();

2

List<Key> customEntityKeys = new ArrayList<Key>();
for (String id : results.getIds()) {
    customEntityKeys.add(KeyFactory.createKey("CustomEntity", id));
}

mgr = getEntityManager();
JPADatastoreBridge jpaBridge = new JPADatastoreBridge();
List<CustomEntity> customEntities = new ArrayList<CustomEntity>();

Map<Key,Entity> customEntityMap = datastore.get(customEntityKeys);
for (Entity customEntityEntity : customEntityMap.values()) {
    customEntities.add((CustomEntity) jpaBridge.getJPAFromEntity(customEntityEntity, mgr, CustomEntity.class));                 
}
return customEntities;

在“更好的方法”中,我的意思主要是表现明智。另外,如果有另一种方式,我会很高兴听到它。 感谢。

P.S。
我使用JPA作为我的持久性方法。不确定这是否真的很重要。

1 个答案:

答案 0 :(得分:0)

我不知道大部分代码,但如果你问是否应该使用Query("SELECT.... WHERE ID IN....")datastore.get(...),那么第二个很多,更好。获取比使用App Engine数据存储区的查询更有效 - 更不用说它们总是非常一致,而非祖先查询最终是一致的。