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());
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 件のコメント:
コメントを投稿