我对刚刚检索到的对象列表的 JDO 持久性有点问题。
我想做的是:
- 获取“订单”列表
- 修改一个属性“状态”
- 批量更新“订单”
到目前为止,我得到的是"Object with id ... is managed by a different Object Manager"。但是等等,没有 Spring,我还没有遇到过这样的问题!
我试图像这样调试它:
List<Orderr> orders = orderDao.findByIdAll(ordersKeys);
for(Orderr o : orders) {
System.out.println(JDOHelper.getPersistenceManager(o).hashCode());
//hashcode is 1524670
o.setSomething(somevalue);
}
orderDao.makePresistentAll(orders); //hashcode inside is 31778523
makePersistentAll 除了:
try {
System.out.println(getPersistenceManager().hashCode());
getPersistenceManager().makePersistentAll(entities);
} finally {
getPersistenceManager().close();
}
我所有的 DAO 都扩展了 JdoDaoSupport。pmf 由 spring 注入和管理。
最后,问题来了:为什么在findByIdAll之后持久化管理器关闭了?或者我为什么要获得新的持久性管理器实例?当然,我的 findByIdAll 方法不会在持久性管理器上调用 close。
当然,如果我为每个“订单”调用 makePersistent 效果很好。但它打破了业务和数据库逻辑的分层......
UPD 刚刚发现,在迁移到 spring 管理的 PersistenceManager 后,所有对 makePersistentAll 的调用都不起作用。在春天之前,我使用了普通的旧 PMF.get() 助手,一切都很闪亮!