- - PR -
HibernateのCriteriaについて
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-06-19 23:33
お世話になります。
商品検索画面にて商品名の部分文字列(searchString)と価格範囲(minPrice〜maxPrice)を入力し、 検索ボタンを押すと該当する商品の一覧が表示されるようにしたいと思っています。 この検索を擬似HQLで書くと次のような感じです。
動的にSQLを生成するためにHibernate(3.2.0)のCriteriaを使ってみることにしました。 そして次のようなコードを書きました。
変数searchString, minPrice, maxPriceに値が設定されている場合は希望通りの結果が得られました。 ただ検索条件変数のいずれかがnullの場合は、対応する検索条件を外してくれると期待していたのですが、 HQLのログを見ると外れていません。 例えば、minPriceとmaxPriceがnullの場合、次のようなHQLを発行することを期待していました。
HibernateのCriteriaはそこまでは対応してくれないのでしょうか? それとも使い方間違っているのでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: zutto 編集日時 2007-06-19 23:43 ] | ||||||||||||
|
投稿日時: 2007-06-20 00:22
自己レスです。
Query By Exampleではnullである検索条件を除外できるAPIがサポートされているようですが、 Criteriaでは検索条件のnullチェックはマニュアルでしないといけないみたいですね。 | ||||||||||||
|
投稿日時: 2007-06-20 10:07
動的にクエリーを書き換える必要がない場合は、 静的なHQLの方が(バグも少ないし)楽だと思いますよ。 Criteriaは動的に結合するテーブルを変更するとかの場合は 非常に便利なのですが、一般的にむしろ可読性が下がります。 [追記] ついでに、
これで期待通りの動きするのってOracleくらいですよ。 NULLと空文字を区別しない特殊な仕様なので。 Oracleのマニュアルにも、いつか変えるかもしれないから、 NULLと空文字が等価であることを前提としないように、って 書いてあります。いまさら変えることは無理でしょうけど。 [/追記] [ メッセージ編集済み 編集者: あしゅ 編集日時 2007-06-20 10:20 ] |
1