1 PersistenceManager pm = PMF.get().getPersistenceManager();
// 取出在datastore中已有的某個Parent object
2 Parent p = pm.getObjectById(Parent.class, "it's key");
// 取出在datastore已有的某個Child object
3 Child c = pm.getObjectById(Child.class, "it's key");
// 關閉pm
4 pm.close();
// 再開一個新的pm
5 pm = PMF.get().getPersistenceManager();
// 修改Parent中某個persistent field: title(這裡只是舉例)
6 p.setTitle("new title");
// 修改Child中某個persistent field: title(這裡只是舉例)
7 c.setTitle("new title");
// 將修改「update」至datastore
8 pm.makePersistentAll(p, c);
// 關閉pm
9 pm.close();
在上面這段程式碼中,
假設Parent是Child的parent,而Parent的parent是root(即沒有parent),
從Datastore viewer中會發現,
p的修改有存入,但c的修改卻沒有存入。
根據Google給的tutorial:http://code.google.com/intl/en/appengine/docs/java/
datastore/jdo/creatinggettinganddeletingdata.html
(縮網址:http://ppt.cc/Fmo_)
在「Updating an Object」的那節可以知道,pm會記得資料有修改的地方,
所以如果pm已經被關閉了(如上code #4),
之後重開的pm因為不知道有沒有修改,
所以我手動加了makePersistentAll(如上code #8)要它去update,
不知道這樣的想法問題出在哪裡?
如果要更新失敗,也是兩個一起失敗吧,
怎麼會一個成功、另一個失敗?
ps. 我用其他class再測,發現只要沒有parent的就會成功,有parent的就會失敗...
搞了一天還是弄不懂,有沒有人可以幫幫我,
或是說明jdo中persistence的觀念,讓我更清楚一點,謝謝。
--
這是為什麼哭呢?
是為了我們而哭麼?
恨我麼?
那會愛我麼?
那麼現下你無論如何也不會回頭了,是麼?
--青垚《天子謀/蘇記棺材舖》
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.48.247
※ 編輯: minksable 來自: 140.112.48.247 (05/26 06:07)