Pessoal, boa noite.
Fiquei o dia todo quebrando a cabeça em um projeto que estou desenvolvendo.
Tenho uma classe de Pedido e outra de itens.
As informações do pedido consigo salvar, alterar, excluir tranquilo. Mas meus itens eu nao sei como resolver, acontece o seguinte.
Na tela de pedido consigo digitar os itens normalmente, porém ao gravar, ele salva o pedido normal, mas os itens não.
Ex: Se eu digitar o pedido 1 - item 3 e gravar, ele grava.
Se eu digitar o pedido 2 - item 3, ele muda o registro na tabela ‘itemPedido’ substituindo o pedido 1 pelo 2.
Alguém pode me dar uma luz?
Classe pedido (partes importantes)
@IdentificaCampoPesquisa(descricaoCampo = "Código", campoConsulta = "ped_codigo")
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "pedido_seq")
private Long ped_codigo;
....
@OneToMany(mappedBy = "pedido",cascade = CascadeType.ALL,orphanRemoval = true,fetch = FetchType.EAGER)
private List<ItemPedido> itens = new ArrayList<>();
// getters and setters.
Classe ItemPedido (partes importantes)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY, generator = "item_pedido_seq")
private Long item_ped_codigo;
@Column(nullable = false, length = 20)
private String item_ped_codigo_proprio;
@Column(scale = 4, precision = 15, nullable = false)
private Integer item_ped_qtde;
@Column(nullable = false, length = 80)
private String item_ped_descricao;
@Column(scale = 2, precision = 10)
private BigDecimal item_ped_val_unit = BigDecimal.ZERO;
@ManyToOne
@JoinColumn(name = "produto")
@ForeignKey(name = "produto_item_pedido_fk")
private Produto produto;
@ManyToOne
@JoinColumn(name = "pedido_ped_codigo", referencedColumnName = "ped_codigo")
@ForeignKey(name = "pedido_item_pedido_fk")
private Pedido pedido;
Bean (método salvar)
@Transactional
public void save() throws Exception {
if (meuObjeto.getItens().isEmpty()) {
FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "O pedido precisa de pelo menos um item.", ""));
return;
}
if (meuObjeto.isValorTotalNegativo()) {
FacesContext.getCurrentInstance().addMessage("", new FacesMessage(FacesMessage.SEVERITY_ERROR, "O valor total do pedido não pode ser nagativo", ""));
return;
}
for (int i = 0; i < meuObjeto.getItens().size(); i++) {
System.out.println("get: "+meuObjeto.getItens().get(i).getProduto().getPrd_descricao());
}*/
}
this.meuObjeto.recalcularValorTotal();
this.meuObjeto.removerItemVazio();
meuObjeto= pedidoController.merge(meuObjeto);
sucesso();
novo();
}
}
Acho estranho pq essa saída: “System.out.println…” mostra os itens certinho antes de gravar.
Estou usando escopo de sessão.