【问题标题】:GAE, JDO: Add, Move & Delete entities of ordered listGAE、JDO:添加、移动和删除有序列表的实体
【发布时间】:2012-10-26 03:55:07
【问题描述】:

嗨,我有一个父实体说 A,它有一个子实体列表说 List 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"))

私有列表对象;

现在我添加到列表使用:

newObj.setIndex(0);

for (int i = 0; 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 的行为很奇怪。随机对象被删除,列表处于完全不一致的状态!

GAE:1.7.2

DataNucleus 增强器(版本 3.1.0.m2)

【问题讨论】:

    标签: java google-app-engine jdo


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 做到了。甚至尝试不更改索引,只是从列表中删除对象并保留,但仍然无法正常工作。如果该信息有帮助,则持久性发生在事务中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多