我已经使用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