Fórum Garantindo integridade entre itemvenda com venda JPA #487570
31/07/2014
0
venda.setTotal(pedidoCarrinho.getTotal());
venda.setCliente(cliente);
venda.setVendedor(vendedor);
venda.setCfop(cfop);
venda.setDataEmissao(new Date());
venda.setEmpresa(empresa);
ItemVenda itemVenda = new ItemVenda();
itemVenda.setProduto(produto);
for (int i = 0; i < pedidoCarrinho.getItensOrdenadosEmLista().size(); i++) {
System.out.println(pedidoCarrinho.getItensOrdenadosEmLista().get(i)
.getProduto().getId());
produto.setId(pedidoCarrinho.getItensOrdenadosEmLista().get(i)
.getProduto().getId());
itemVenda.setVenda(venda);
itemVenda.setDataVenda(new Date());
itemVenda.setPrecoTotal(pedidoCarrinho.getItensOrdenadosEmLista()
.get(i).getPrecoTotal());
itemVenda.setValorUnitario(pedidoCarrinho
.getItensOrdenadosEmLista().get(i).getValorUnitario());
itemVenda.setQuantidade(pedidoCarrinho.getItensOrdenadosEmLista()
.get(i).getQuantidade());
itemVenda.setProduto(produto);
venda.getItens().add(itemVenda);
itemVenda = new ItemVenda();
}
dao.addVenda(venda);
aqui está relacionamento das tabela
@Entity
@Table(name = "itemvenda")
public class ItemVenda implements Serializable, Comparable<ItemVenda> {
private static final long serialVersionUID = -6083937769807378921L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "Quantidade")
private Integer quantidade;
@Column(name = "ValorUnitario")
private Double valorUnitario;
@Column(name = "preco_total")
@NotNull
private Double precoTotal;
@Column(name = "data_venda")
private Date dataVenda;
@ManyToOne(cascade = CascadeType.PERSIST, optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "id_produto", nullable = false)
@NotNull
private Produto produto;
@ManyToOne(cascade = CascadeType.PERSIST, optional = false, fetch = FetchType.EAGER)
@JoinColumn(name = "id_venda", nullable = false)
@NotNull
private Venda venda;
@Entity
@Table(name = "venda")
public class Venda implements Serializable {
private static final long serialVersionUID = -9186348467323901258L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Integer id;
@Column(name = "Total")
private Double total;
@Temporal(value = TemporalType.TIMESTAMP)
private Date dataEmissao;
@ManyToOne
@JoinColumn(name = "idCliente", nullable = false)
@NotNull
private Cliente cliente;
@OneToMany(mappedBy = "venda", cascade = CascadeType.PERSIST)
private Set<ItemVenda> itens;
@ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "id_empresa")
private Empresa empresa;
@ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "id_vendedor")
private Vendedor vendedor;
@ManyToOne(optional = false, cascade = CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name = "id_cfop")
private CFOP cfop;
Adriano Aguiar
Curtir tópico
+ 0Post mais votado
18/03/2015
Isso não vai influenciar em nada na relação itemVenda -> Produto, pois você não deve usar CASCADE nessa relação, já que os Produtos podem ser utilizados em outras vendas para outros itens.
Aconselho a leitura de um artigo mais detalhado: https://www.devmedia.com.br/cascade-hibernate-conhecendo-diferentes-tipos/28892
Ronaldo Lanhellas
Gostei + 1
Mais Posts
01/08/2014
Ronaldo Lanhellas
@OneToMany(mappedBy = "venda", cascade = CascadeType.ALL) private Set<ItemVenda> itens;
Gostei + 0
01/08/2014
Ronaldo Lanhellas
@OneToMany( cascade = CascadeType.ALL) private Set<ItemVenda> itens;
Gostei + 0
01/08/2014
Adriano Aguiar
Gostei + 0
02/08/2014
Adriano Aguiar
grato!
Gostei + 0
05/08/2014
Ronaldo Lanhellas
Certo meu caro, normalmente fazemos assim.
Gostei + 0
05/08/2014
Ronaldo Lanhellas
List<ItemVenda> itens = new ArrayList<ItemVenda>();
for (int i = 0; i < pedidoCarrinho.getItensOrdenadosEmLista().size(); i++) {
System.out.println(pedidoCarrinho.getItensOrdenadosEmLista().get(i)
.getProduto().getId());
produto.setId(pedidoCarrinho.getItensOrdenadosEmLista().get(i)
.getProduto().getId());
itemVenda.setVenda(venda);
itemVenda.setDataVenda(new Date());
itemVenda.setPrecoTotal(pedidoCarrinho.getItensOrdenadosEmLista()
.get(i).getPrecoTotal());
itemVenda.setValorUnitario(pedidoCarrinho
.getItensOrdenadosEmLista().get(i).getValorUnitario());
itemVenda.setQuantidade(pedidoCarrinho.getItensOrdenadosEmLista()
.get(i).getQuantidade());
itemVenda.setProduto(produto);
itens.add(itemVenda);
itemVenda = new ItemVenda();
}
venda.setItens(itens);
Gostei + 0
11/03/2015
Gabriell Amaral
@OneToMany( cascade = CascadeType.ALL) private Set<ItemVenda> itens;
Caro Ronaldo,
Estou com uma dúvida sobre a utilização do cascade, no caso o CascadeType.ALL é recomendado? Pois o ItemVenda a ser inserido é uma tabela relacional entre venda e produto, certo? No caso com CascadeType.ALL não causaria uma persistência duplicada de produto e venda, pois ao inserir o itemVenda, o mesmo persistiria novamente os filhos item e venda , nao?
Se tiver algum material que me ajude a entender melhor a utilização do cascade, pois os exemplos que vejo somente tem a utilização do CascadeType.ALL.
PROBLEMA QUE TENHO{
1. Cadastrar um itemVenda, tenho mapeado produto, venda e item, onde a relação do item com venda e produto é ManyToOne. O Produto e venda tem um relacionamento OneToMany com ItemVenda;
2. Para inserir um ItemVenda novo, posso buscar o produto e a venda no bando de dados e inserir por meio do set produto e venda na classe Item venda e persistir o ItemVenda com o cascadeType.ALL? Pois o que acontece comigo é que o ItemVenda é persistido e a venda e o produto novamente.
}
No caso como faço para que possa somente relacionar venda e produto por meio da tabela ItemVenda sem que os mesmo sejam persistidos novamente?
Desde já grato,
Abraço.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)