primavera-datos de la subconsulta dentro de las Especificaciones

Primavera-datos, Oliver Esta excelente biblioteca, tiene algo que se llama un Especificación (org.springframework.de datos.jpa.dominio.Especificación). Con él usted puede generar varios predicados estrechar sus criterios de búsqueda.

Alguien puede dar un ejemplo de uso de una Subconsulta dentro de la Especificación?

Tengo un gráfico de objetos y con los criterios de búsqueda pueden llegar a ser muy peludo. Me gustaría utilizar una Especificación para ayudar con el estrechamiento de la búsqueda, pero necesito utilizar una Subconsulta para ver si algunos de los sub-elementos (dentro de una colección) en el gráfico del objeto de satisfacer las necesidades de mi búsqueda.

Gracias de antemano.

OriginalEl autor John Kroubalkian | 2012-08-21

1 Kommentar

  1. 24
    String projectName = "project1";
    List<Employee> result = employeeRepository.findAll(
        new Specification<Employee>() {
            @Override
            public Predicate toPredicate(Root<Employee> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                Subquery<Employee> sq = query.subquery(Employee.class);
                Root<Project> project = sq.from(Project.class);
                Join<Project, Employee> sqEmp = project.join("employees");
                sq.select(sqEmp).where(cb.equal(project.get("name"),
                        cb.parameter(String.class, projectName)));
                return cb.in(root).value(sq);
            }
        }
    );

    es el equivalente de la siguiente consulta jpql:

    SELECT e FROM Employee e WHERE e IN (
        SELECT emp FROM Project p JOIN p.employees emp WHERE p.name = :projectName
    )
    Es posible utilizar explícitamente una constante instrucción SQL en una manera similar?
    Sí. Para pasar el valor de la constante uso de la cb.literal(1000) <– cualquier constante.
    Es posible el uso de una subconsulta en la cláusula select? En este caso, la subconsulta en la cláusula where.

    OriginalEl autor Pieter

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea