在我的应用程序中,我有一个控制流程如下:
DAO object = persistenceManager.getObjectById(DAO.class, id);
...
persistenceManager.deletePersistent(anotherReferenceToObject);
...
DAO aThirdObjectReference = persistenceManager.getObjectById(DAO.class, id);
这些都在不同的范围内,但persistenceManager
引用都指向相同的PersistenceManager
。
当第三个DAO对象与第二个对象相同时,会出现问题。 PersistenceManager
愉快地返回刚刚删除的同一个对象,但在尝试访问或更改部分内容之前,我需要知道它已被删除!
我不想关闭pm,因为其他原因保持开放是很重要的。有没有办法判断一个对象是否是deletePersistent
的参数?
答案 0 :(得分:2)
删除对象后,您使用的是PersistenceManager.flush()吗?在以编程方式或管理器关闭之前调用之前,任何更改(编辑,创建,删除)都不会提交到数据库。因此,从已创建/最后刷新PersistenceManager时,“已删除”对象将以其原始状态进行访问。
答案 1 :(得分:0)
正如DataNucleus指出的那样,我可以用以下方法测试先前的删除:
JDOHelper.getObjectState(object).equals(ObjectState.PERSISTENT_DELETED)
即使事务尚未提交且pm尚未刷新,这将在删除object
后返回true。