JDO PersistenceManager: как я могу сказать, что объект, возвращенный getObjectById, был удален? - PullRequest
1 голос
/ 19 февраля 2011

В моем приложении есть определенный поток управления, который выглядит следующим образом:

DAO object = persistenceManager.getObjectById(DAO.class, id);

...

persistenceManager.deletePersistent(anotherReferenceToObject);

...

DAO aThirdObjectReference = persistenceManager.getObjectById(DAO.class, id);

Все они находятся в разных областях, но persistenceManager указывает на то, что все указывают на один и тот же PersistenceManager. * 1006.*

Проблема возникает, когда третий объект DAO оказывается таким же, как второй объект.PersistenceManager счастливо возвращает тот же объект, который был только что удален, но мне нужно знать, что он был удален, прежде чем я попытаюсь получить к нему доступ или изменить его части!по другим причинам, чтобы держать его открытым.Есть ли способ определить, был ли объект параметром deletePersistent?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2011

Используете ли вы PersistenceManager.flush () после удаления объекта? До тех пор, пока это не будет вызвано программно или когда менеджер не будет закрыт, любые изменения (изменения, создания, удаления) не будут зафиксированы в базе данных. Таким образом, «удаленные» объекты будут доступны в их первоначальном состоянии с момента создания / последней очистки PersistenceManager.

0 голосов
/ 24 февраля 2011

Как указал DataNucleus, я могу проверить предварительное удаление с помощью:

JDOHelper.getObjectState(object).equals(ObjectState.PERSISTENT_DELETED)

Это вернет true после того, как object было удалено, даже если транзакция не была подтверждена, а вечера не было сброшено.

...