Hibernate3のDetachedCriteria

Hibernate3 で導入された機能のうち、私が差し当たって一番注目しているのは DetachedCriteria だ。Annotationも興味深いけれど、設計の方向性としてちょっと疑問を感じる部分が無いではないのと、業務での開発がTigerに移行するまでもうしばらくかかるから、後回し。

さて、DetachedCriteriaだ。OOPLにおけるデータ検索APIとしはて、これがあって然るべきだったんだよなー。うんうん。検索っていうものをビジネスロジックにおける一過程に過ぎないと捉えれば、確かにcriteriaはセッションに依存したテンポラリな存在であっていい。多分これが従来のCriteria Queryの立場で、HQL QueryをOO的にする薄いラッパーみたいなものに過ぎなかった。

Javadocには単に「セッションが手に入らないときでもCriteriaを構築する必要がある場合」に使うって簡潔に書いてある。確かに、機能だけ見ればこれはSerializableだし、セッションを超えたレベルでCriteriaを持ち運び、使用して、また持ち運びっていうそういう使い方をするものに過ぎない。でも、単にライフサイクルの設計が悪い場合やフレームワークの都合上やむを得ない場合を除けば、この機能が必要になる場合ってどういう場合だろう。それって、検索条件って言うもの自体に操作対象としての重要性があるような場合において、こういう機能が必要になるんじゃ無かろうか。検索条件っていうものが、トランザクションを超えて、セッションを超えて、永続化の対象にすらなりうるような場合に。 うまくいえないのだけれど、私はDetachedCriteriaに何か「高階性」を感じている。きっとそういうものなんだろう。もう少し使い込んでみれば、もう少しはっきりしてくるかも知れない。