...
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 |
|---|
|
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 |
|---|
|
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 |
|---|
|
@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 );
} |