JDO PersistenceManager:如何判断getObjectById返回的对象是否已被删除?

时间:2011-02-18 23:04:52

标签: java jdo

在我的应用程序中,我有一个控制流程如下:

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

...

persistenceManager.deletePersistent(anotherReferenceToObject);

...

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

这些都在不同的范围内,但persistenceManager引用都指向相同的PersistenceManager

当第三个DAO对象与第二个对象相同时,会出现问题。 PersistenceManager愉快地返回刚刚删除的同一个对象,但在尝试访问或更改部分内容之前,我需要知道它已被删除!

我不想关闭pm,因为其他原因保持开放是很重要的。有没有办法判断一个对象是否是deletePersistent的参数?

2 个答案:

答案 0 :(得分:2)

删除对象后,您使用的是PersistenceManager.flush()吗?在以编程方式或管理器关闭之前调用之前,任何更改(编辑,创建,删除)都不会提交到数据库。因此,从已创建/最后刷新PersistenceManager时,“已删除”对象将以其原始状态进行访问。

答案 1 :(得分:0)

正如DataNucleus指出的那样,我可以用以下方法测试先前的删除:

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

即使事务尚未提交且pm尚未刷新,这将在删除object后返回true。