根據JDO,您可以使用PersistenceManager.getObjectsById通過對象ID加載多個實體實例。App Engine上的getObjectsById
需要在這裏使用什麼樣的集合? Google數據存儲密鑰不能用作對象ID。
根據JDO,您可以使用PersistenceManager.getObjectsById通過對象ID加載多個實體實例。App Engine上的getObjectsById
需要在這裏使用什麼樣的集合? Google數據存儲密鑰不能用作對象ID。
沒有直接回答,通過作爲替代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);
}
顯然,這個查詢進行了優化,使用效率低級別的大宗原料藥。
鍵的順序確實會丟失,所以你將不得不重新排序在Java土地的結果。
使用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然而多麼昂貴(這不應該是從我所看到的)。
上面的答案几乎是正確的。
Google在其開發者網站上解釋的語法似乎有錯誤。
解釋由谷歌:
//給我的lastName等於史密斯或瓊斯 查詢查詢= pm.newQuery所有員工(Employee.class, 「:p.contains(lastName的)」) ; query.execute(Arrays.asList(「Smith」,「Jones」));
當然,它應該是:
//給我的lastName等於史密斯或瓊斯 查詢查詢= pm.newQuery(Employee.class, 「p.contains(所有員工:名字)「); query.execute(Arrays.asList(「Smith」,「Jones」));
該文檔是正確的。 「:p」是您的列表,並且您正在檢查其「lastName」包含在您的列表中的對象,因此
我不能使其工作:問題與查詢