2012-10-26 68 views
0

嗨,我有一個父實體說A有子實體列表說明列表<B>孩子。GAE,JDO:添加,移動和刪除有序列表的實體

我需要維護子實體的順序,因爲它對我的應用程序很重要。

的方式我做它用: 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);

}

而且使用delete:

for (int i = index + 1; i < objList.size(); i++) {

objList.get(i).setIndex(i - 1);

}

objList.remove(index);

這是正確的做法嗎?添加&移動似乎工作。但是,刪除行爲很奇怪。隨機objs被刪除,列表處於完全不一致的狀態!

GAE:1.7.2

DataNucleus將增強(3.1.0.m2版)

回答

0

從一個索引中刪除對於索引的列表(即標準JDO列表)非常有用,並且您沒有使用該列表。當你用DataNucleus和一個RDBMS調用它時會引發異常。很明顯,GAE並沒有得到如此的細微處理,但是邏輯學會建議它。從有序列表中移除某些內容真的應該調用remove(Object)

使用此索引列設置移動對象可能會在下次讀入時運行; 「訂購」條款所做的唯一事情就是在閱讀時訂購物品。

+0

完美!謝謝 :) – Srinivas

0

嘗試調整所有索引之前調用objList.remove()。

+0

是否做到了這一點。即使嘗試不改變索引,只是從列表中刪除對象並堅持,但仍然無法正常工作。如果信息有幫助,堅持會發生在交易中。 – Srinivas