임시 컬렉션을 반환해야하는 모든 관리자에게 특정 쿼리 방법이 있지만 실행 후 바로 닫고 싶습니다.Datanucleus Query : 닫은 후 임시 컬렉션에 액세스
tx.begin();
Query query=pm.newQuery(...);
Collection col=(Collection)query.execute();
pm.makeTransientAll(col,true);
query.close();
tx.commit();
문제 : 쿼리가 닫힌 후 컬렉션에 액세스 할 수없는 (? DN이 신원을 알고)는 "쿼리가 닫혔습니다"그렇지 않으면 발생 오류!
해결책 : : 원본 컬렉션의 복사본을 만드십시오!
Collection col=new ArrayList((Collection)query.execute());
하지만 그것은 로컬 복사본의 경우에도 ... 그 피하려고하고 깊은 클론이 아니다, 그것은 여전히 요소 (그래서, 어떤 시점에서 존재의 전체 배열에 필요한 공간을 할당 2 배 배정 된 메모리 될 것) 그리고 나는 그것을 피하고 싶습니다.
내가 뭔가를 놓친 것입니까? 복제본 생성을 피하는 방법이 있습니까?
는 쿼리 개체 (컬렉션) 반환하는 경우의 예 :