SIGESA: Ejemplos Específicaciones

Integer

  • Equals
/*************************************************************************************************/
    /*************************************************************************************************/
    /**********          SPECIFICATION: nombreLikeOrdenadoByNombre               *********************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    public static Specification<PeriodoAnual> anoEquals(final Integer ano) {
        return new Specification<PeriodoAnual>() {
            @Override
            public Predicate toPredicate(Root<PeriodoAnual> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                Expression x = root.get("ano");
                Expression y = cb.literal(ano);

                return cb.equal(x, y);
            }
        };
    }

    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/

Boolean

  • Equals
/*************************************************************************************************/
    /*************************************************************************************************/
    /****************          SPECIFICATION: activoEquals                   *************************/
    /*************************************************************************************************/
    /*************************************************************************************************/

    public static Specification<ClienteTavo> activoEquals(final Boolean activo) {
        return new Specification<ClienteTavo>() {
            @Override
            public Predicate toPredicate(Root<ClienteTavo> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                Expression x = root.get("activo");
                Expression y = cb.literal(activo);
                return cb.equal(x, y);
            }
        };
    }
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/

String

  • LikeOrdenadoBy
/*************************************************************************************************/
    /*************************************************************************************************/
    /****************          SPECIFICATION: nombreLikeOrdenadoByNombre     *************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    public static Specification<ClienteTavo> nombreLikeOrdenadoByNombre(final String query) {
        return new Specification<ClienteTavo>() {
            @Override
            public Predicate toPredicate(Root<ClienteTavo> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                Expression x = root.get("nombre");
                Expression y = cb.literal("%" + query + "%");

                cq.orderBy(cb.asc(x));
                return cb.like(cb.upper(x), cb.upper(y));
            }
        };
    }
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/

Fechas

  • LessThan
/*************************************************************************************************/
    /*************************************************************************************************/
    /****************          SPECIFICATION: nombreLikeOrdenadoByNombre     *************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    public static Specification<ClienteTavo> fechaDeNacimientoLessThan(final Date fechaNacimiento) {
        return new Specification<ClienteTavo>() {
            @Override
            public Predicate toPredicate(Root<ClienteTavo> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
                Expression x = root.get("fechaNacimiento");
                Expression y = cb.literal(fechaNacimiento);
                return cb.lessThan(x, y);
            }
        };
    }

    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
  • Año entre
public static Specification<PlanAporteEstrategico> periodoAnualEntre(final Integer anno) {
        return new Specification<PlanAporteEstrategico>() {
            @Override
            public Predicate toPredicate(Root<PlanAporteEstrategico> root, CriteriaQuery<?> cq,
                    CriteriaBuilder cb) {
                // build query here
                Expression x = root.join("periodoAnualInicial").get("ano");
                Expression y = root.join("periodoAnualFinal").get("ano");
                Expression z = cb.literal(anno);
                return cb.between(z,x,y);
            }
        };
    }

Subconsultas

  • Ejemplo 1
/*************************************************************************************************/
    /*************************************************************************************************/
    /****************          SPECIFICATION: tipoEtapaPorTipoPlan           *************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*
     * Documentación:
     * SELECT * FROM TIPO_ETAPA WHERE ID_TIPO_ETAPA IN (SELECT TIPO_ETAPA FROM ETAPA_PLAN WHERE TIPO_PLAN = 3);
     * 
     */
    public static Specification<TipoEtapa> tipoEtapaPorTipoPlan(TipoPlan tipoPlan) {
        return new Specification<TipoEtapa>() {
            @Override
            public Predicate toPredicate(Root<TipoEtapa> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {

                //Subquery
                Subquery<EtapaPlan> queryEtapaPlan = cq.subquery(EtapaPlan.class);
                Root rootEtapaPlan = queryEtapaPlan.from(EtapaPlan.class);

                // Expresión1: EtapaPLan
                Expression selectTipoEtapa = rootEtapaPlan.get("tipoEtapa");
                Expression whereTipoPlan = rootEtapaPlan.get("tipoPlan");
                Expression litTipoPlan = cb.literal(tipoPlan);
                queryEtapaPlan.select(selectTipoEtapa).where(cb.equal(whereTipoPlan, litTipoPlan));



                // Expresión2: TipoEtapa
                Expression whereIdTipoEtapa = root.get("id");

                // return
                return whereIdTipoEtapa.in(queryEtapaPlan);
            }
        };
    }
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/
    /*************************************************************************************************/