Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

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:

Bloque de código
languagejava
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:

Bloque de código
languagejava
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:


Bloque de código
languagejava
 @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 );
 }