2013-10-31 25 views
0

任何人都可以推薦更好的方法來通過來自GAE HRD數據存儲的多個ID查詢實體嗎?Google App Engine - 推薦使用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作爲我的持久性方法。不知道這真的很重要。

回答

0

我不知道大部分的代碼,但如果你問你是否應該使用Query("SELECT.... WHERE ID IN....")datastore.get(...),二是非常非常更好。獲取比使用App Engine數據存儲的查詢效率更高 - 更不用說事實上它們始終保持一致性,而非祖先查詢只是最終一致。