Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Sugerencia] PruebaPorParametros y sugerencia en metodo "consultaPorParametros"

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!

1 respuesta
solución!

Hola Alexis, espero que estés bien!

Gracias por compartir tu sugerencia y solución, felicitaciones! Espero que estés disfrutando del contenido y las actividades!

Mucho éxito en todo lo que te propongas y si tienes alguna duda aquí estaremos para apoyarte.

¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!