Google App Engineで以下のクエリを実行する。
Query query = pm.newQuery(TestDto.class);
List<TestDto> testDtoList = (List<TestDto>) query.execute();
この直後、
取得したtestDtoListのリストに、
適当にnewしたオブジェクトを追加
TestDto testDto = new TestDto();
testDtoList.add(testDto);
しようとすると
java.lang.UnsupportedOperationException: Query result sets are not modifiable
となる。
例外から読み取ると、
クエリの結果で得たtestDtoListは参照渡しで生成されているため、
参照元のオブジェクトに影響が出る事は出来ない模様。
ただ↑の事象はわりと特殊なだけで、多分GAEが…というわけではなく、
Javaの規則によるものだと思われる。
例えば、
String[] strHairetu = {"aaa","bbb","ccc"};
List strList = Arrays.asList(strHairetu);
とあった時、
strList.add("ddd");
とすると、strListの変更はstrHairetuの配列にも反映されようとするが
strHairetuは配列のため、要素を増やす事が出来ず、
UnsupportedOperationException
が発生する。
要は、Google App Engineのデータストアも、
なんらかしらの理由で取得する際の要素数が固定化されているんじゃないかと。
勿論憶測ね。
…うん。今度調べるよorz