Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[Bug] Error en ItemPedido.getValor()

Al ejecutar se crean las tablas, pero al momento de insertar los datos lanza el siguiente error: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadPor cierto, todo funcionaba correctamente antes de agregar el método getValor() en la clase ItemPedido.java.

Aquí abajo dejo mi código.

Main Estoy usando MySQL y no H2, y este "main" es otra clase llamada TestRegistro.java que hize para mantener un mejor orden y no modificar la clase RegistroProducto.java del video anterior.

    public static void main(String[] args) {
        EntityManager em = JPAUtil.getEntityManager();

        /*datos producto y categoría*/
        ProductoDAO productoDAO = new ProductoDAO(em);
        CategoriaDAO categoriaDAO = new CategoriaDAO(em);

        Categoria categoria = new Categoria("Teclados");
        Producto producto = new Producto("Teclado tkl HP", "Teclado formato TKL de marca hp",
                                                             new BigDecimal("155"),  categoria);

        /*datos cliente y pedidos*/
        ClienteDAO clienteDAO = new ClienteDAO(em);
        PedidoDAO pedidoDAO = new PedidoDAO(em);

        Cliente cliente = new Cliente("Juan", "1234567890");
        Pedido pedido = new Pedido(cliente);
        pedido.addItems(new ItemPedido(1, producto, pedido));
        
        /*guardado*/
        em.getTransaction().begin();

        categoriaDAO.guardar(categoria);
        productoDAO.guardar(producto);

        clienteDAO.guardar(cliente);
        pedidoDAO.guardar(pedido);

        em.getTransaction().commit();
        em.close();

    }

Pedido


@Entity
@Table(name = "pedidos")
public class Pedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "fecha")
    private LocalDate fecha;
    @Column(name = "valor_total")
    private BigDecimal valorTotal;

    @ManyToOne
    @JoinColumn(name = "cliente")
    private Cliente cliente;

    @OneToMany(mappedBy = "pedido", cascade = CascadeType.ALL)
    private List<ItemPedido> items = new ArrayList<>();

    public Pedido() {
    }

    public Pedido(Cliente cliente) {
        this.cliente = cliente;
        this.fecha = LocalDate.now();
    }

    public Pedido(LocalDate fecha, BigDecimal valorTotal) {
        this.fecha = fecha;
        this.valorTotal = valorTotal;
    }
    public void addItems(ItemPedido item){
        item.setPedido(this);
        this.items.add(item);
        this.valorTotal = this.valorTotal.add(item.getValor());
    }

    //== GETTERS & SETTERS ==
}

ItemPedido



@Entity
@Table(name = "item_Pedido")
public class ItemPedido {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    @Column(name = "cantidad")
    private int cantidad;
    @Column(name = "precio_unitario")
    private BigDecimal precioUnitario;
    @ManyToOne
    private Producto producto;
    @ManyToOne
    private Pedido pedido;

    public ItemPedido() {
    }

    public ItemPedido(int cantidad, Producto producto, Pedido pedido) {
        this.cantidad = cantidad;
        this.producto = producto;
        this.pedido = pedido;
        this.precioUnitario = producto.getPrecio();
    }

    public BigDecimal getValor(){
        return this.precioUnitario.multiply(new BigDecimal(this.cantidad));
    }



    // SETTERS & GETTERS
}
1 respuesta
solución!

Error solucionado. Al parecer me olvidé de asignar un valor a la variable valorTotal de la clase Pedido.Java, abjo dejaré un ejemplo de como sería el código solucionado.

❌ Forma incorrecta ❌

@Column(name = "valor_total")
    private BigDecimal valorTotal;

✔ Forma correcta ✔

@Column(name = "valor_total")
    private BigDecimal valorTotal = new BigDecimal(0);