2011-12-02 1 views
1

ibatis를 통해 데이터베이스에서 ID 목록을 선택하지만 add 새 요소를 시도하면 지원되지 않는 예외가 발생합니다.ibatis의 목록 반환을 수정할 수 없습니까? (UnsupportedOperationException을 throw합니다)

ibatis가 반환 한 목록은 최종적이며 불변입니까?

+0

final이 아닙니다. final은 * variable *의 속성이며 객체의 _ 속성이 아닙니다. 단순히 변수가 다시 할당되는 것을 막을뿐입니다. list * object *는 변경할 수 없으며이를 변경하려고 시도 할 때 예외를 던집니다. (final의 다른 의미는 여기서는 무의미합니다.) –

+0

@pst 예외를 던져도 변경되지 않습니다. 버그가있는 구현은 새 요소를 추가 한 다음 예외를 throw 할 수 있습니다. 또는 대체 구현으로 아무 것도하지 않을 수 있습니다. 예외를 던지는 것은 신호 일뿐입니다. – emory

+0

@emory 예. List의 구현은 아무것도하지 않습니다. 스택 쇼, 마지막 호출은 AbstracList public void add (int index, E element)입니다. – x4snowman

답변

2

예 읽기 전용 목록은 이고 목록을 반복 할 때 읽고 쓰는 데이터베이스 커서에 의해 백업 될 수 있습니다. 데이터를 조작하기 전에 데이터를 복사해야합니다.

List<Long> ids = new ArrayList<Long>(); 
ids.addAll(ibatusIds); 
+0

"데이터베이스 커서에 의해 백업 될 수 있습니다"에 대한 자세한 내용이 있습니까? – x4snowman

+0

대부분의 ORM이 그렇게합니다. 나는 특별히 ibatis에 대해 모른다. –