JDOの問合せ言語

RDBユーザからは非常に評判が悪いのですが、JDO本を読んだ印象としては確かにうなづける点があります。ユーザからの見え方としては、コレクションの各要素に対してフィルタを実行し、その結果がtrueのものが選択されるというとてもシンプルなものです。

選択される対象はオブジェクトだけですし、joinや副問合せもできませんので、すでに存在しているJDBCで書いたアプリをJDOで書き直すというときには、物足りなさを感じるでしょうし、実行効率も悪そうです。たとえば、レコード数を知りたいときにはコレクションのsize()をしなければなりません(あ、EJBもそうだっけ)。

問合せの式もJavaで書くので、declareParametersというパラメタの宣言が必要ですし、他のパッケージのクラスを参照するときにはdeclareImportsを宣言しなければなりません。単純な式なら良いのですが複雑になるとちょっと面倒かもしれません。

query.declareParameters("String foo, Date bar");
query.declareImports("import Foo");

と、文句を書いてきましたが、簡単な問合せならそれほど忌み嫌うほど悪くはないと思います。すべてをJavaオブジェクトをベースに考えるので、SQLを知らない人にとっては、すべてをメモリ上でやっているような感覚で簡単にプログラミングできるでしょう。

それに、問合せ言語をプラグインできるようなので、デフォルトのJDOQL以外にも処理系ごとに独自拡張することも可能です。現時点ではJDOの仕様に関して移植性云々を言ってもしょうがない気もします。JBossに関しては、JBossDO用の問合せ言語を作るか、JDO 2.0の様子見といったところでしょうか。