0

嗨,我有一个父实体说 A,它有一个子实体列表说 List<B> children。

我需要维护子实体的顺序,因为它对我的应用程序很重要。

我使用的方法是: https ://developers.google.com/appengine/docs/java/datastore/jdo/relationships#Owned_One_to_Many_Relationships

有序集合如何维护它们的顺序。

@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);

这是正确的方法吗?添加和移动似乎工作。但是 Delete 的行为很奇怪。随机对象被删除,列表处于完全不一致的状态!

盖伊:1.7.2

DataNucleus 增强器(版本 3.1.0.m2)

4

2 回答 2

0

在调整所有索引之前尝试调用 objList.remove() 。

于 2012-10-26T04:15:58.817 回答
0

在索引处删除仅对索引列表(即标准 JDO 列表)有意义,而您没有使用它。当您使用 DataNucleus 和 RDBMS 调用它时,会引发异常。显然 GAE 并没有解决这些细节问题,但是逻辑会暗示它。从有序列表中删除某些东西确实应该调用remove(Object)

使用此索引列的设置移动对象可能会起作用……在下次读入它们时;“排序”子句所做的唯一一件事就是在读入内容时对其进行排序。

于 2012-10-26T07:44:49.343 回答