2010年3月25日木曜日

Hibernateで ORDER BY *** IS NULL ASC を実現したい

MySQLでソート時にNULLを優先させたくない場合は

ORDER BY XXX IS NULL ASC, XXX ASC

と書く事で解決できますが、Hibernateに対応するAPIが見つかりませんでした。

Criteriaを使ってコードがすっきりしているのでSession#createSQLQuery()は使いたくなかったので以下の様にして無理やり実現してみたのですが、もっと簡単に出来ないものでしょうか?

List list
// createCriteria()内で検索条件を追加
Criteria criteriaA = createCriteria(session);
Criteria criteriaB = createCriteria(session);

// キーとなる XXX が Not Null なデータを取得
criteriaA.add(Expression.isNotNull("XXX"));
criteriaA.addOrder(Order.asc("XXX"));
list = criteriaA.list();

// キーとなる XXX が Null なデータを取得しcriteriaAの結果に追加
criteriaB.add(Expression.isNull("XXX"));
list.addAll(criteriaB.list());




0 件のコメント: