Red Hat Training
A Red Hat training course is available for Red Hat JBoss Web Server
15.16. Tips & Tricks
実際に結果を返さなくてもクエリの結果数を数えることができます:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue()
コレクションのサイズにより結果を並べ替えるためには以下のクエリを使用します:
select usr.id, usr.name from User as usr left join usr.messages as msg group by usr.id, usr.name order by count(msg)
使用しているデータベースがサブセレクトをサポートする場合、クエリの where 節でサイズによる選択条件を設定できます:
from User usr where size(usr.messages) >= 1
使用しているデータベースが副問い合わせ(Subselect)に対応していない場合は、次のクエリを使用してください:
select usr.id, usr.name from User usr join usr.messages msg group by usr.id, usr.name having count(msg) >= 1
この解決法は、内部結合をしているせいでメッセージの件数がゼロの
User
を返すことができないため、以下の形式も役立ちます:
select usr.id, usr.name from User as usr left join usr.messages as msg group by usr.id, usr.name having count(msg) = 0
JavaBean のプロパティは、名前付きのクエリパラメータに結びつけることが出来ます:
Query q = s.createQuery("from foo Foo as foo where foo.name=:name and foo.size=:size"); q.setProperties(fooBean); // fooBean has getName() and getSize() List foos = q.list();
コレクションはフィルタ付き
Query
インターフェースを使用することでページをつけることができます:
Query q = s.createFilter( collection, "" ); // the trivial filter q.setMaxResults(PAGE_SIZE); q.setFirstResult(PAGE_SIZE * pageNumber); List page = q.list();
コレクション要素はクエリフィルタを使って、並べ替えやグループ分けが出来ます:
Collection orderedCollection = s.createFilter( collection, "order by this.amount" ).list(); Collection counts = s.createFilter( collection, "select this.type, count(this) group by this.type" ).list();
コレクションを初期化せずにコレクションのサイズを得ることができます:
( (Integer) session.createQuery("select count(*) from ....").iterate().next() ).intValue();