Sintaxis de consulta del mediador EJB
Cuando empieza a escribir las aplicaciones para aprovechar el Data Mediator Service (DMS) de EJB (Enterprise JavaBeans) incluido en el producto, tenga en cuenta los elementos siguientes.
- El DMS de EJB toma como argumento de entrada una consulta de EJB compuesta que consta de una matriz que contiene sentencias EJB QL (EJB Query Language) y un mandato XREL opcional. El mandato XREL está en la lista de relaciones de EJB y debe aparecer en último lugar en la matriz.
- Todas las consultas EJB QL devuelven datos en forma de una instancia SDO (Service DataObjects). Todas las instancias SDO se fusionan en un DataGraph. La cláusula SELECT de cada consulta especifica las expresiones o los campos de CMP (persistencia gestionada por contenedor) o los campos de CMP que se deben devolver en el SDO. La cláusula WHERE especifica las condiciones de filtrado y se puede definir una cláusula ORDER BY. Si dos o más cláusulas SELECT devuelven el mismo tipo de SDO, cada una de ellas debe proyectar los mismos campos CMP y expresiones. Para las funciones de actualización, los campos de clave primaria del EJB debe proyectarse. Las operaciones JOIN y UNION y la agregación no están soportas excepto en las subconsultas.
- Una consulta de la matriz puede hacer referencia a una consulta anterior de la cláusula FROM mediante la utilización de la variable definida en la consulta anterior y un nombre de relación. Esta relación puede ser de un solo valor o con valor de agrupación.
- Las relaciones se construyen entre instancias de objeto de datos del gráfico cuando se utiliza una relación en la cláusula FROM o en el mandato XREL.
- Los argumentos de entrada con valor de agrupación reciben soporte en
la cláusula FROM. Si ?1 hace referencia a una agrupación de EJB Dept, la
siguiente consulta es válida para el mediador. La sintaxis de cast es
necesaria para indicar al compilador de consultas el tipo de elemento
collection.
select d.deptno from (Dept) ?1 as d
- El argumento de entrada de tipo collection es útil cuando se desea crear un DataGraph a partir de las instancias de EJB colocadas en memoria caché en el contenedor de EJB o la memoria caché de datos del gestor de persistencia.
- La cláusula SELECT puede especificar una lista de campos CMP para recuperar (se puede utilizar
la notación de comodín * para recuperar todos los campos CMP) o expresiones de lenguaje de consulta de EJB válidas. Los campos CMP y las expresiones deben ser de uno de los tipos siguientes:
- Tipos primitivos: boolean, byte, short, integer, long, float, double, char
- Los tipos de envoltura de objeto para los tipos primitivos
- Java™.lang.String
- Java.math.BigDecimal
- java.math.BigInteger
- byte [ ]
- Java.sql.Date
- java.sql.Time
- java.sql.Timestamp
- java.util.Date
- java.util.Calendar
- Todos los campos CMP de clave primaria deben recuperarse por orden para que los SDO (Service Data Objects) se puedan actualizar; de lo contrario, applyChanges devuelve una excepción.
- Los atributos SDO que proceden de expresiones del lenguaje de consulta de EJB como e.salary + e.bonus AS TOTAL_PAY no se pueden actualizar. Si intenta hacer una actualización, applyChanges devuelve una excepción QueryException.
- Las expresiones de agregados como SUM(e.salary) no se permiten aún cuando sean parte del lenguaje de consulta de EJB. Las expresiones de agregados se pueden utilizar en sentencias SELECT subordinadas de la cláusula WHERE.