Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/10/2013, 01:24
NeoAres
 
Fecha de Ingreso: mayo-2013
Mensajes: 68
Antigüedad: 11 años
Puntos: 0
Método con resultados según parámetros cliente

Vuelvo a "dar por saco" xD

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:


Código Java:
Ver original
  1. public List<Personas> getAll(Personasform pform)
  2. {
  3.     EntityManager em = getEntityManager();
  4.     CriteriaBuilder cb = em.getCriteriaBuilder();
  5.     CriteriaQuery<Personas> criteriaQuery = cb.createQuery(Personas.class);
  6. // Obtenemos el EntityManager, CriteriaBuilder y Creamos el Query sobre la entidad deseada (Usuario.class en nuestro caso)
  7. // Creamos los predicados
  8.     Predicate conjunction = cb.conjunction();
  9.     Predicate disjunction = cb.disjunction();
  10.  
  11.     if (pform.getNombres() != null && !"".equals(pform.getNombres()))
  12.     {
  13. // % Agregamos los comodines SQL al inicio y fin del parametro a buscar
  14.           conjunction.getExpressions().add(cb.like(Personas.[COLOR="red"]get[/COLOR]("nombre").as(String.class), "%"+ pform.getNombres() + "%"));
  15.     }
  16.  
  17.     if (disjunction.getExpressions().size() > 0)
  18.     {
  19. // agregamos el disjunction al conjunction para que quede encerrado en paréntesis (como en el Query SQL
  20. // de la Imagen de Arriba)
  21.         conjunction.getExpressions().add(disjunction);
  22.     }
  23.  
  24.     if (conjunction.getExpressions().size() > 0)
  25.     {
  26.         criteriaQuery.where(conjunction);
  27.     }
  28. // retornamos la lista filtrada
  29.     return em.createQuery(criteriaQuery).getResultList();
  30. }
Pero da error en el get en rojo, creo que el criteriabuilder se usa para esto(consultas dinámicas) sino corregidme please

Gracias con antelación