Hola comunidad!
vine a dejar una sugerencia dirigida a mis pares Debido a que el video de la clase "Consulta con parametros dinamicos" tiene problemas de edicion, les dejo el link a otro topic de este foro donde facilitan el codigo de la clase Prueba de Parametros
Topic!
Titulo llamativo (?
Por otro lado les dejo una solucion a un problema que se me presento al momento de pensar el metodo "ConsultaPorParametros" si yo envio todos mis parametros como null el resultSet deberia estar vacio y/o tirar una excepcion con un mensaje, eso dependera de la exigencia del cliente, en este caso yo supuse que el cliente quiere un mensaje de error, para tal fin devuelvo una lista nula, para asi forzar un NullPointerException y poder tratarlo con un bloque try catch en mi main, les dejo el codigo de mi metodo (que nombre de forma distinta, por costumbre) para plasmar un poco lo que quiero decir
FindByParameter
public List<Producto> findByParameter(String nombre,
BigDecimal precio,
LocalDate fecha){
StringBuilder jpql = new StringBuilder("SELECT P
FROM Producto P
WHERE 1=1 ");
if(nombre != null && !nombre.trim().isEmpty()){
jpql.append("AND nombre = :nombre");
}
if(precio != null && !precio.equals(new BigDecimal(0))){
jpql.append("AND precio = :precio");
}
if(fecha != null){
jpql.append("AND fechaRegistro = :fecha");
}
TypedQuery<Producto> query = entityManager
.createQuery(jpql.toString(),
Producto.class);
if(nombre != null && !nombre.trim().isEmpty()){
query.setParameter("nombre", nombre);
}
if(precio != null && !precio.equals(new BigDecimal(0))){
query.setParameter("precio", precio);
}
if(fecha != null){
query.setParameter("fechaRegistro", fecha);
}
if (jpql
.toString()
.equals("SELECT P FROM Producto P WHERE 1=1 "))
{
List<Producto> productoList = new ArrayList<>();
productoList.add(null);
return productoList;
}
return query.getResultList();
}
Extracto Main class PruebaDeParametros
public static void main(String[] args) {
cargarBancoDeDatos();
EntityManager entityManager = JPAUtils.getEntityManager();
ProductoDAO productoDAO = new ProductoDAO(entityManager);
List<Producto> res = productoDAO.findByParameter(null,
null,
null);
try{
System.out.println(res.get(0).getDescripcion());
}catch (NullPointerException e){
System.out.println("Error, Debe completar al menos 1 campo");
e.printStackTrace();
}
}
Espero que les sea de ayuda!