각 인스턴스에는 버전 형식의 개체 목록 (프로젝트와 버전 클래스 간의 소유 된 일대 다 관계)이있는 지속 가능한 클래스 Project가 있습니다.GAE 용 JDO : 쿼리에 의해 반환 된 개체 업데이트
내가 그들을 변경하고 저장하려고 쿼리와 데이터 저장소에서 여러 버전의 개체를 받고 있어요 :
PersistenceManager pm = PMF.get().getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
Query q = pm.newQuery(Version.class, "... filters here ...");
q.declareParameters(" ... parameters here ...");
List<Version> versions = (List<Version>)q.execute(... parameters here ...);
if (versions.size() > 0) {
for (Version version : versions) {
version.setOrder(... value here ...);
}
pm.makePersistentAll(versions);
}
tx.commit();
return newVersion.toVersionInfo();
} finally {
pm.close();
}
모두가 오류없이 실행, 쿼리는 실제로 속성이 런타임 버전 목록에 올바르게 설정되어, 여러 개체를 반환 개체 속성은 데이터 저장소에서 업데이트되지 않습니다. 개체 속성)을 (pm.close 전에 설정되어 있지만,이 행이 생략되면 아무것도 저장되지 않기 때문에
일반적으로, 지금까지의 내가 이해, 버전, 심지어
pm.makePersistentAll(versions);
를 호출하지 않고 저장해야합니다, 게다가.
동시에, pm.getObjectById() 메소드로 Project 유형의 인스턴스 (많은 버전의 인스턴스를 소유) 인스턴스를 검색하고 루프의 모든 관련 버전 객체를 살펴보면 모든 변경 사항이 올바르게 저장됩니다 pm.makePersistent() 메서드를 호출하지 않고).
문제는 개체를 업데이트하는 것과 같은 문제가 무엇인가하는 것입니다. 왜 버전 객체 속성이 데이터 저장소에서 업데이트되지 않습니까?
JDO 나 GAE 문서에서 도움이되는 정보를 찾을 수 없습니다. 피터 Recore에서 DataNucleus에서 로그에 대한 조언과 공감에 대한
아마도 setOrder를 호출하는 시점에서 로그를 보면 더 잘 이해할 수 있습니다. – DataNucleus
당신을 도울 수는 없지만, 이런 종류의 디버깅이 확실히 내 머리를 찢어 지도록 만들었 기 때문에 동정심을 제공 할 수 있습니다 ... –