嗨我有一个父实体说A有子实体列表说List< B>孩子。
我需要维护子实体的顺序,因为它对我的应用程序很重要。
订购集合如何维护订单。
@Persistent
@Element(dependent = "true")
@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="index ASC"))
private List objects;
现在我使用:
添加到列表中
newObj.setIndex(0);
for (int i = 0; i < objList.size(); i++) {
objList.get(i).setIndex(i + 1);
}
objList.add(newObj);
使用以下方式移动:
if (direction.equalsIgnoreCase("up")) {
objList.get(index).setIndex(index - 1);
objList.get(index - 1).setIndex(index);
}
else if (direction.equalsIgnoreCase("down")) {
objList.get(index).setIndex(index + 1);
objList.get(index + 1).setIndex(index);
}
使用以下命令删除:
for (int i = index + 1; i < objList.size(); i++) {
objList.get(i).setIndex(i - 1);
}
objList.remove(index);
这是正确的方法吗?添加&amp;移动似乎有效。但删除表现得很奇怪。随机objs被删除,列表处于完全不一致的状态!
GAE:1.7.2
DataNucleus Enhancer(版本3.1.0.m2)
答案 0 :(得分:0)
尝试在调整所有索引之前调用objList.remove()。
答案 1 :(得分:0)
在索引处删除仅对索引列表(即标准JDO列表)有实际意义,并且您没有使用它。当您使用DataNucleus和RDBMS调用它时会抛出异常。很明显,GAE没有绕过这样的细节,但逻辑会暗示它。从有序列表中删除某些内容确实应该调用 remove(Object)。
使用此索引列的设置移动对象可能会在下次读入时工作... “排序”子句唯一能做的就是在读取它们时对它进行排序。