Válido también para operaciones FundeWeb v1.5.


Hasta ahora, en las consultas que usaban filtros dinámicos, usadas generalmente para las tablas lazy, solo se podía usar un tipo de operador lógico al añadir las restricciones. Es decir, o todas las restricciones en el where usaban AND o todas OR, y no se podían mezclar. Ahora, con la nueva funcionalidad, podemos mezclar diferentes operadores lógicos en las restricciones del where,

Lo primero que tenemos que hacer es añadir en la implementación del DAS o en la clase donde se definen las restricciones:

import static es.um.atica.seam.framework.Query.LOGIC_OPERATOR_AND;
import static es.um.atica.seam.framework.Query.LOGIC_OPERATOR_OR;
import es.um.atica.seam.framework.QueryRestriction;


Las restricciones la podemos definir como QueryRestriction[] o como List<QueryRestriction>. Este ultimo es el tipo se suele usa como parámetro en los métodos a utilizar o en la propia definición de las restricciones. Veamos un ejemplo:

QueryRestriction[] restriction = {
    new QueryRestriction("cursoAcademico in :cursos", LOGIC_OPERATOR_AND),
    new QueryRestriction("tipoCurso in :tipos", LOGIC_OPERATOR_OR)
};


Y al invocar al DAS, debemos utilizar los métodos que tienen nombre resultsByXXXXXWithDinamicRestrictionFilter(). Que tienen un parámetro del tipo List<QueryRestriction>. Veamos un ejemplo:


 @Override
 public ResultQuery<CasiopeaCurso> buscar( int firstResult, Integer resultLimit, List<QueryRestriction> restrictions, Map<String, Object> parameters, String sortField, String sortOrder ) {
     return super.resultsByEntityQueryWithDinamicRestrictionFilter( restrictions, parameters, firstResult, resultLimit, sortField, sortOrder, null );
 }

Al componer la consulta, si hay más de una restricción en el where, la restricción se añadir comenzando con el operador lógico definido. Ejemplo:

select ent
from MiEntidad ent
where cursoAcademico in :cursos or tipoCurso in :tipos


Como siempre el orden de aplicación de las restricciones, es el orden con que se definan en el array o la lista.