Resulta que en un formulario JSF tengo una tabla esperando accionar el botón "búsqueda" para que según los campos rellenados por el cliente busque en la base de datos una cosa u otra. Por ejemplo, tengo 4 campos de texto (nombre,apellidos,edad,salario) y según cuales tengan contenido se hará la búsqueda con tales parámetros rellenados.
Al presionar el botón búsqueda se accede al método de la clase JPAController "getAll(objeto_que_contiene_datos_rellenados)" y en éste método me he quedado atrancado, he probado algo como esto
Código:
Pero da error en el get en rojo, creo que el criteriabuilder se usa para esto(consultas dinámicas) sino corregidme pleaseCódigo Java:Ver original
public List<Personas> getAll(Personasform pform) { EntityManager em = getEntityManager(); CriteriaBuilder cb = em.getCriteriaBuilder(); CriteriaQuery<Personas> criteriaQuery = cb.createQuery(Personas.class); // Obtenemos el EntityManager, CriteriaBuilder y Creamos el Query sobre la entidad deseada (Usuario.class en nuestro caso) // Creamos los predicados Predicate conjunction = cb.conjunction(); Predicate disjunction = cb.disjunction(); if (pform.getNombres() != null && !"".equals(pform.getNombres())) { // % Agregamos los comodines SQL al inicio y fin del parametro a buscar conjunction.getExpressions().add(cb.like(Personas.[COLOR="red"]get[/COLOR]("nombre").as(String.class), "%"+ pform.getNombres() + "%")); } if (disjunction.getExpressions().size() > 0) { // agregamos el disjunction al conjunction para que quede encerrado en paréntesis (como en el Query SQL // de la Imagen de Arriba) conjunction.getExpressions().add(disjunction); } if (conjunction.getExpressions().size() > 0) { criteriaQuery.where(conjunction); } // retornamos la lista filtrada return em.createQuery(criteriaQuery).getResultList(); }
Gracias con antelación