Al ejecutar se crean las tablas, pero al momento de insertar los datos lanza el siguiente error: Por 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
}