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);
}
분명히,이 쿼리는 효율적인 낮은 수준의 대량 API를 사용하도록 최적화되어 있습니다.
키의 순서가 손실되기 때문에 Java 토지에서 결과를 다시 정렬해야합니다. 같은
List<Object> ids = new ArrayList<Object>();
for (Key key : keys) {
ids.add(pm.newObjectIdInstance(Foo.class, key));
}
return (List<Foo>) pm.getObjectsById(ids);
로
위의 답변은 거의 정확합니다.
개발자 웹 사이트에서 Google이 설명하는 구문에 실수가있는 것으로 보입니다.
이 구글에 의해 설명 :// 나에게 스미스 나 존스 검색어 쿼리 = pm.newQuery에이 lastName 동일한 모든 종업원 부여 (Employee.class, "p.contains (lastName 속성)") ; query.execute (Arrays.asList ("Smith", "Jones")); 확실히
가 있어야한다 :
을 // 나에게 스미스 나 존스 검색어 쿼리 = pm.newQuery (Employee.class, "p.contains (에이 lastName 동일한 모든 종업원 보내기이 lastName) "); query.execute (Arrays.asList ("Smith", "Jones"));
문서가 올바른 것입니다. ": p"가 목록이고 "lastName"이 목록에 포함되어있는 개체가 있는지 확인하고 있으므로
나는 그것이 작동되도록 할 수없는입니다 : 지원되지 않는 방법 표현을 구문 분석하는 동안 :. InvokeExpression {[ParameterExpression {키}] 포함 (VariableExpression 쿼리에 문제가 <: keys.contains이 (키) 책 SELECT> {key}})} –