30.6.4. JBossQL

JBossQL は EJB-QL のスーパーセットであり、EJB-QL の不足機能を補完するため作られています。柔軟性のある構文のほか、新しい関数、キーワード、文節が加わりました。現時点では、JBossQL は ORDER BYOFFSET および OFFSET 句、IN および LIKE 演算子のパラメーター、COUNTMAXMINAVGSUMUCASE および LCASE 関数をサポートしています。また、クエリは select メソッドに対する SELECT 句の関数を含みます。
JBossQL は JBossQL クエリを含む jboss-ql 要素付きの jbosscmp-jdbc.xml ファイルで宣言されます。以下に JBossQL 宣言の例を紹介します。
<jbosscmp-jdbc>
    <enterprise-beans>
        <entity>
            <ejb-name>GangsterEJB</ejb-name>
            <query>
                <query-method>
                    <method-name>findBadDudes_jbossql</method-name>
                    <method-params>
                        <method-param>int</method-param>
                    </method-params>
                </query-method>
                <jboss-ql><![CDATA[ SELECT OBJECT(g) FROM gangster g WHERE g.badness > ?1 ORDER BY g.badness DESC ]]></jboss-ql>
            </query>
        </entity>
    </enterprise-beans>
</jbosscmp-jdbc>
これに対応する生成された SQL は単純でわかりやすくなっています。
SELECT t0_g.id
    FROM gangster t0_g
    WHERE t0_g.badness > ?
    ORDER BY t0_g.badness DESC
JBossQL には LIMITOFFSET 関数を使い、ファインダ結果をブロックで読み出す機能も備わっています。たとえば、実行した大量のジョブを繰り返すには、以下の findManyJobs_jbossql finder を定義します。
<jbosscmp-jdbc>
    <enterprise-beans>
        <entity>
            <ejb-name>GangsterEJB</ejb-name>
            <query>
                <query-method>
                    <method-name>findManyJobs_jbossql</method-name>
                    <method-params>
                        <method-param>int</method-param>
                    </method-params>
                    <method-params>
                        <method-param>int</method-param>
                    </method-params>
                </query-method>
                <jboss-ql><![CDATA[ SELECT OBJECT(j) FROM jobs j OFFSET ?1 LIMIT ?2 ]]></jboss-ql>
            </query>
        </entity>
    </enterprise-beans>
</jbosscmp-jdbc>