2012-10-26 2 views
0

안녕하세요 저는 상위 엔티티가 하위 엔티티 목록이있는 A라고 말합니다. 목록 <B>라고 말합니다.GAE, JDO : 정렬 된 목록의 엔티티 추가, 이동 및 삭제

내 신청서가 중요하기 때문에 하위 항목을 유지 관리해야합니다.

내가 그것을 사용했던 방법 : 정렬 된 컬렉션이 순서를 유지하는 방법 https://developers.google.com/appengine/docs/java/datastore/jdo/relationships#Owned_One_to_Many_Relationships

. 사용

newObj.setIndex(0);

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

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

}

objList.add(newObj);

이동 :

@Persistent

@Element(dependent = "true")

@Order(extensions = @Extension(vendorName="datanucleus", key="list-ordering", value="index ASC"))

private List objects;

지금 내가 사용 목록에 추가

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

올바른 방법인가요? & 이동이 작동하는 것처럼 보입니다. 그러나 삭제는 이상하게 행동합니다. 임의의 obj가 삭제되고 목록이 완전히 일치하지 않는 상태가됩니다!

GAE : 1.7.2

DataNucleus 증강 (버전 3.1.0.m2)

답변

0

색인에서 제거하면 색인이 목록 (즉 표준 JDO 목록) 인 경우에만 의미가 있으며 사용하지 않는 것이 좋습니다. DataNucleus와 RDBMS로 호출하면 예외가 발생합니다. 분명히 GAE는 그런 명석으로 돌아 가지 않았지만 논리는 그것을 제안 할 것입니다. 순서가 지정된 목록에서 무언가를 제거하는 것은 정말 (개체)을 호출해야합니다.

이 인덱스 열을 사용하여 주위를 움직이는 물체는 다음에 읽을 때 작동 할 수 있습니다. "주문"조항이하는 유일한 일은 그들이 읽혀지는 시점에서 물건을 주문하는 것입니다.

+0

완벽! 감사 :) – Srinivas

0

시도는 모든 인덱스를 조정하기 전에 objList.remove()를 호출합니다.

+0

그랬습니까. 심지어 인덱스를 변경하지 않고 그냥 목록에서 개체를 제거하고 유지하지만 여전히 일들이 작동하지 않습니다. 그 정보가 도움이된다면 지속은 트랜잭션에서 발생합니다. – Srinivas