データストアのリクエスト内容の変更 | sola's note

sola's note

日ごろのメモを書いていきます。何か新しいものを作るために。

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