根据JDO,您可以使用PersistenceManager.getObjectsById按对象ID加载多个实体实例。
在这里需要使用哪种系列? Google数据存储密钥不能用作对象ID。
答案 0 :(得分:3)
使用PersistenceManager.newObjectIdInstance(),因此
List<Object> ids = new ArrayList<Object>();
for (Key key : keys) {
ids.add(pm.newObjectIdInstance(Foo.class, key));
}
return (List<Foo>) pm.getObjectsById(ids);
我不确定对newObjectIdInstance的调用是多么昂贵(它不应该来自我所看到的)。
答案 1 :(得分:2)
不是直接的答案,作为getObjectsById
的替代方案,您似乎可以使用JDOQL query to load multiple entities by key:
public List getById(List keys) {
Query q = pm.newQuery(
"select from " + Book.class.getName() + " where :keys.contains(key)");
return (List) q.execute(keys);
}
显然,此查询已经过优化,可以使用高效的低级批量API。
键的顺序确实会丢失,所以你必须在Java土地上重新排序结果。
答案 2 :(得分:0)
我上面的答案几乎是正确的。
Google在其开发者网站上解释的语法似乎存在错误。
谷歌解释:
//给我所有lastName等于Smith或Jones的员工 查询查询= pm.newQuery(Employee.class, “:p.contains(lastName的)”); query.execute(Arrays.asList(“Smith”,“Jones”));
当然应该是:
//给我所有lastName等于Smith或Jones的员工 查询查询= pm.newQuery(Employee.class, “p.contains(:名字)”); query.execute(Arrays.asList(“Smith”,“Jones”));