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>