30.6.4. JBossQL
JBossQL は EJB-QL のスーパーセットであり、EJB-QL の不足機能を補完するため作られています。柔軟性のある構文のほか、新しい関数、キーワード、文節が加わりました。現時点では、JBossQL は
ORDER BY、OFFSET および OFFSET 句、IN および LIKE 演算子のパラメーター、COUNT、MAX、MIN、AVG、SUM、UCASE および 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 には
LIMIT と OFFSET 関数を使い、ファインダ結果をブロックで読み出す機能も備わっています。たとえば、実行した大量のジョブを繰り返すには、以下の 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>