Я пишу небольшое приложение, использующее GWT и JDO для хранения постоянных данных. Я пытался написать функцию, которая обновляет несколько объектов JDO на основе запроса. Его тело выглядит примерно так:
PersistenceManager pm = getPersistenceManager();
try {
q = pm.newQuery(MyObject.class, query);
List<MyObject> objects = (List<MyObject>) q.execute();
for (MyObject object: objects) {
object.setMyField(newValue);
}
System.out.println(objects); //[1]
} finally {
pm.close();
}
Если посмотреть на вывод оператора print на [1], все объекты имеют правильно обновленные значения. Однако когда я выполняю RPC для получения обновленных объектов, значения остаются такими же, какими они были до вызова метода update. Если я проверяю хранилище данных в панели администратора, обновления также не отображаются.
Все остальные действия персистентности в моем приложении работают нормально (например, добавление новых объектов, удаление объектов, запрос объектов), но я не могу понять, что здесь не так. Большинство ресурсов, которые я обнаружил (например, http://code.google.com/appengine/docs/java/datastore/jdo/creatinggettinganddeletingdata.html#Updating_an_Object), предполагают, что простое открытие PersistenceManager должно сохранять любые изменения, которые вы вносите в извлеченные объекты.
Есть предложения? Я действительно сбит с толку.
Спасибо!
РЕШЕНИЕ
PersistenceManager pm = getPersistenceManager();
try {
q = pm.newQuery(MyObject.class, query);
List<MyObject> objects = (List<MyObject>) q.execute();
for (MyObject object: objects) {
object.setMyField(newValue);
JDOHelper.makeDirty(object, myField);
}
} finally {
pm.close();
}