30.6.5. DynamicQL
DynamicQL はランタイム生成と JBossQL クエリの実行を可能にします。DynamicQL クエリメソッドは抽象メソッドで、JBossQL とクエリ引数をパラメーターとして取り込みます。JBoss は JBossQL をコンパイルし、生成済み SQL を実行します。以下は、州一覧の中の任意の州に存在する gangster を選択する JBossQL クエリを生成するものです。
public abstract class GangsterBean
implements EntityBean
{
public Set ejbHomeSelectInStates(Set states)
throws FinderException
{
// generate JBossQL query
StringBuffer jbossQl = new StringBuffer();
jbossQl.append("SELECT OBJECT(g) ");
jbossQl.append("FROM gangster g ");
jbossQl.append("WHERE g.hangout.state IN (");
for (int i = 0; i < states.size(); i++) {
if (i > 0) {
jbossQl.append(", ");
}
jbossQl.append("?").append(i+1);
}
jbossQl.append(") ORDER BY g.name");
// pack arguments into an Object[]
Object[] args = states.toArray(new Object[states.size()]);
// call dynamic-ql query
return ejbSelectGeneric(jbossQl.toString(), args);
}
}
DynamicQL select メソッドには有効な select メソッド名が複数ありますが、このメソッドではストリングとオブジェクトアレイをパラメーターとして取る必要があります。DynamicQL は
dynamic-ql 要素付きの jbosscmp-jdbc.xml ファイルで宣言します。以下に ejbSelectGenericの宣言を示します。
<jbosscmp-jdbc>
<enterprise-beans>
<entity>
<ejb-name>GangsterEJB</ejb-name>
<query>
<query-method>
<method-name>ejbSelectGeneric</method-name>
<method-params>
<method-param>java.lang.String</method-param>
<method-param>java.lang.Object[]</method-param>
</method-params>
</query-method>
<dynamic-ql/>
</query>
</entity>
</enterprise-beans>
</jbosscmp-jdbc>