JBoss.org Community Documentation
DynamicQL allows the runtime generation and execution of JBossQL queries. A DynamicQL query method is an abstract method that takes a JBossQL query and the query arguments as parameters. JBoss compiles the JBossQL and executes the generated SQL. The following generates a JBossQL query that selects all the gangsters that have a hangout in any state in the states set:
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); } }
The DynamicQL select method may have any valid select method name, but the method must always take a string and an object array as parameters. DynamicQL is declared in the jbosscmp-jdbc.xml
file with an empty dynamic-ql
element. The following is the declaration for 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>