Desglose de consulta de JPQL para entender su sintaxis fácil, analicemos la siguiente consulta:
SELECT e.* FROM Employee e WHERE ( ( :#{#filters.departmentId} IS NULL -- ¿No se especificó departamento? AND e.department_id IS NULL -- ¿El empleado no tiene departamento? ) OR ( :#{#filters.departmentId} IS NOT NULL -- ¿Se especificó un departamento? AND e.department_id = :#{#filters.departmentId} -- ¿Coincide con el departamento del empleado? ) ) AND ( ( :#{#filters.salary} IS NULL -- ¿No se especificó salario? AND e.salary IS NULL -- ¿El empleado no tiene salario registrado? ) OR ( :#{#filters.salary} IS NOT NULL -- ¿Se especificó un salario? AND e.salary >= :#{#filters.salary} -- ¿El salario del empleado es mayor o igual? ) )
Donde:
- #filters - Es el objeto de filtros que se pasa como parámetro
- departmentId - Propiedad del objeto filters para filtrar por departamento
- salary - Propiedad del objeto filters para filtrar por salario mínimo
- e - Alias de la tabla Employee
Esta consulta:
Filtra empleados por departamento:
- Si no se especifica departamento, trae empleados sin departamento
- Si se especifica, trae empleados del departamento indicado
Filtra por salario:
- Si no se especifica salario, trae empleados sin salario registrado
- Si se especifica, trae empleados con salario mayor o igual al indicado
Comentarios
Publicar un comentario