SSブログ

GAE/J の Datastore API では Map を保存できない [NT]

Google App Engine の Java 版(ここでは GAE/J と表記する)の話。

GAE/J ではデータベース(RDB)は使用できない。その代わりに Datastoe API を利用する。これは、JDO とか JPA を利用して、要は、オブジェクトをシリアライズして保存しましょうという機能である。

あるデータを保存したいとする。保存したいデータは entity という役割を持つクラスにまとめる必要があり、最終的に entity のプロパティとして格納する必要がある。これらの仕様は Defining Data Classes - Google App Engine - Google Code に記載されている。

問題はそのページの「Collections」である。一部を引用する。

A datastore property can have more than one value. In JDO, this is represented by a single field with a Collection type, where the collection is of one of the core value types or a Serializable class. The following Collection types are supported:

  • java.util.ArrayList<...>
  • java.util.HashSet<...>
  • java.util.LinkedHashSet<...>
  • java.util.LinkedList<...>
  • java.util.List<...>
  • java.util.Set<...>
  • java.util.SortedSet<...>
  • java.util.Stack<...>
  • java.util.TreeSet<...>
  • java.util.Vector<...>

上記リストには Map インターフェースを実装するクラス(例えば、HashMap、TreeMap)が無い。

試しに TreeMap を保存しようとしたところ次の例外が発生した。

Map が使えないとちょっと不便だが、Map を使いたいのならば、素直に、key、value の組み合わせ自体を JDO で書き込んで欲しいということかな?


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。