我對剛剛檢索到的對象列表的JDO持久性存在一些問題。Google App Engine(Java)+ Spring managed PersistenceManager
我想要做的是:
- 取 「訂單」 的列表
- 修改一個屬性 「地位」
- 讓 「訂單」
的批量更新什麼我到目前爲止是「帶有ID的對象...由不同的對象管理器」管理。 但是等一下,沒有春天我沒有遇到過這樣的問題!
我試圖調試它是這樣的:
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由春季注入和管理。
最後,這裏是一個問題:爲什麼在findByIdAll之後關閉持久性管理器?或者爲什麼我會得到新的持久性管理器實例?當然,我的findByIdAll方法不會在持久性管理器上調用close。
當然,如果我爲每個「訂單」調用makePersistent,它的效果很好。但是它破壞分層業務和數據庫邏輯的...
UPD 剛剛發現到makePersistentAll所有呼叫都沒有在所有後Spring管理PersistenceManager的遷移工作。在春天之前,我使用普通的舊PMF.get()幫手,一切都很有光澤!
雖然我正在開發GAE應用程序,但它並不特定於它。我在localhost SDK上有同樣的事情(除了Jetty)。我認爲,正如你所說,「數據庫會話管理器」是PersistenceManagerFactory,但不是PersistenceManager。我可以從每個對象中獲取舊的PersistenceManager,但這不是我應該這樣做的方式。這意味着它根本沒有關閉,但我猜春天是從dao中移除的。 – vshulyak 2010-01-02 21:04:42
嗯。那麼我認爲我們已經超越了我的能力來幫助你。我在GAE應用程序中使用了一些Spring,但我們的關係並不樂觀。對不起,祝你好運! – 2010-01-02 21:27:02
謝謝!是的,這個問題並不明顯...... – vshulyak 2010-01-02 21:33:31