Существует постоянный класс Project, каждый экземпляр которого имеет список объектов типа Version (принадлежащее отношение «один ко многим» между классами Project и Version).
Я получаю несколько объектов Version из хранилища данных с запросом, меняю их и пытаюсь сохранить:
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.makePersistentAll(versions);
, поскольку свойства объекта установлены до pm.close (), но ничего не сохраняется, если эта строка также опущена.
В то же время, если я получу экземпляр типа Project (которому принадлежит множество экземпляров типа Version) с помощью метода pm.getObjectById (), и пройдусь по всем связанным объектам Version в цикле, все изменения будут сохранены правильно (без вызов метода pm.makePersistent ()).
Вопрос в том, что не так с таким способом обновления объектов? Почему свойства объекта Version не обновляются в хранилище данных?
Я не смог найти ничего полезного ни в JDO, ни в документации GAE.