对象不会更新

时间:2011-08-31 15:34:59

标签: java arrays google-app-engine persistence

我有一个字符串和整数作为字段的对象,我可以毫无问题地更新。我只是找到具有唯一ID的正确字段并调用setPersonalName(“Mike”);并使用pm.makePersistent(Personal)创建此对象;它完成了!

问题在于数组字段。假设个人有作业并将其存储在

@Persistent
private String[] Assignments;    

假设我想更新第3个作业,所以我打电话给Personal.setAssignment(3,“给报告”);

和pm.makePersistent(个人); 这不会以某种方式持久化,并且在日志中没有任何错误(仅此:org.datanucleus.ObjectManagerImpl关闭:未提交的nontx更新提交到数据存储区)!我已经检查了值是否在对象中,它是。该值已在对象Personal中。字段没有任何问题,这些字段不是数组。 (顺便说一下,我可以从头开始添加这样的对象,只更新不起作用)。

感谢您的任何想法,我整天都在研究,但找不到任何东西......

这里是setAssignment方法:

    public void setAssignment(int AssignmentNo, String Assignment) {
    this.Assignments[AssignmentNo-1] = Assignment;
    System.out.println(this.Assignments[AssignmentNo-1] + "       " + AssignmentNo + "     " + this.id);
}

2 个答案:

答案 0 :(得分:1)

如果您使用的是JDO,则使用集合将多值属性存储在数据存储区中,如以下链接所述: http://code.google.com/appengine/docs/java/datastore/jdo/dataclasses.html#Collections

我希望这有帮助!

答案 1 :(得分:0)

好的,我找到了解决方案。它现在是关于阵列的。不知何故,每个更新操作必须通过一个简单的setAssignments(String [] Assignments),您可以在其中更新整个数组而不是其中的一个元素。某处我发现jdo以某种方式使用这些方法来更改数据存储区中的字段。如果要更改数组中的元素,则必须将“整个”数组更改为this.Assignments = newAssignments;而不是this.Assignments[i] = newAssignment;