我已經使用apache.JDO/w DataNucleus設置了一個小項目。我可以保存沒有任何問題的數據,但在嘗試更新或刪除時遇到困難。如何使用JDO(DataNucleus)來更新和刪除數據?
的場景是以下內容:
- 創建對象&堅持它,它得到和id
@PrimaryKey @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY) private Long id;
- 我關閉的PersistenceManager
- 在應用程序中,我修改我的對象(瞬態)
- 我嘗試再次堅持(我d字段是相同的),但不是更新它導致創建一個新對象
在Google App Engine中,同樣的場景給了我一個更新(預期結果 - 見下文)。
我也會給你一個小的代碼示例來舉例說明我的問題:
PersistenceManager pm = PMF.getPM(); Option dao = new Option(String.class, "field", "A"); pm.makePersistent(dao); pm.close(); System.out.println("1"); for (Object o : Model.findAll(Option.class)) System.out.println(((Option) o).getValue()); dao.setValue("B"); pm = PMF.getPM(); pm.makePersistent(dao); pm.close(); System.out.println("2"); for (Object o : Model.findAll(Option.class)) System.out.println(((Option) o).getValue()); pm = PMF.getPM(); pm.makePersistent(dao); pm.deletePersistent(dao); pm.close(); System.out.println("3"); for (Object o : Model.findAll(Option.class)) System.out.println(((Option) o).getValue());
我希望可以將輸出爲:
1 A 2 B 3
但相反,它給了我:
1 A 2 A B 3 A B
有什麼建議我做錯了什麼? (順便說一句我使用非事務RW,與RetainValues啓用)
由於對象處於持久狀態,因此不會再次調用makePersistent(),因此會自動檢測到任何更新(與Hibernate不同 - 它必須計算出更改的內容)。而如果你有70-100個領域呢?你更新了一個,所以它更新了一個。 DN文檔定義了哪些優點 – DataNucleus 2010-09-25 17:43:18