前人未踏の領域へ Androidアプリ開発編

Androidアプリ開発に関する調査メモ置き場。古い記事にはアプリ以外も含まれます。

HQLのJOIN及びCOUNT

HQLの書き方でよくはまるのでメモ。テーブルではなくあくまでもClassを扱っていることを忘れないようにしないと。

select c,c.categoryId,count(t) from Category c
left outer join c.threads as t
group by c.categoryId

@ITのフォーラムのような会議室システムの構成をイメージ。Category名及び、その下のスレッドの件数をカウントしたい場合。Categoryクラスのインスタンスから直接SetなりListを取得してsize()を取る方法もあるが、その場合件数を取得するためにThreadクラスのインスタンスまで取得する必要が出てしまうので、こちらの方がよいかと。この場合、Query.list()するとCategoryクラスとcount件数が入った配列のリストが返るので、JSP側でそれを意識して表示すればよいだろう。

<table>
    <tr>
        <th width="*">カテゴリ名</th>
        <th width="10%">スレッド件数</th>
    </tr>
<c:forEach items="${categories}" var="cate">
    <tr>
        <td>
            <a href="threadIndex.do?categoryId=${cate[0].categoryId}">
              <c:out value="${cate[0].categoryNm}"/>
            </a>
        </td>
        <td>${cate[1]}</td>
    </tr>
</c:forEach>
</table>