Pessoal, tô com o seguinte erro ao inserir minha entidade ItemVenda:
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.edu.ifbaiano.entidade.ItemVenda.
Meu código de inserir:
ItemPedido itemPedido = new ItemPedido();
ItemPedidoDAO itemPedidoDAO = new ItemPedidoDAO();
List<ItemPedido> listaItem = itemPedidoDAO
.consultar(itemPedido);
ItemVendaDAO itemVendaDAO = new ItemVendaDAO();
for (ItemPedido i : listaItem) {
ItemVenda itemVenda = new ItemVenda();
if (i.getCodPedido() == Integer.parseInt(request
.getParameter("codPedido"))) {
out.print(Venda.getCodVenda());
itemVenda.setCodProduto(i.getCodProduto());
itemVenda.setQuantidade(i.getQuantidade());
itemVenda.setValorUnitario(i.getValorUnitario());
itemVenda.setIdItemVenda(Venda.getCodVenda());
itemVendaDAO.inserir(itemVenda);
}
}
Minha classe ItemVenda:
@Entity
@Table(name = "ItemVenda")
public class ItemVenda extends Entidade {
@Id
@GeneratedValue (strategy = GenerationType.IDENTITY)
private int idItemVenda;
@Column(name = "venda_codVenda", nullable = false)
private int codVenda;
@Column(name = "produto_codProduto", nullable = false)
private int codProduto;
private int quantidade;
@Column(name = "precoUnitario", nullable = false)
private double valorUnitario;
public int getIdItemVenda() {
return idItemVenda;
}
public void setIdItemVenda(int idItemVenda) {
this.idItemVenda = idItemVenda;
}
public int getCodVenda() {
return codVenda;
}
public void setCodVenda(int codVenda) {
this.codVenda = codVenda;
}
public int getCodProduto() {
return codProduto;
}
public void setCodProduto(int codProduto) {
this.codProduto = codProduto;
}
public int getQuantidade() {
return quantidade;
}
public void setQuantidade(int quantidade) {
this.quantidade = quantidade;
}
public double getValorUnitario() {
return valorUnitario;
}
public void setValorUnitario(double valorUnitario) {
this.valorUnitario = valorUnitario;
}
}
O que pode estar ocasionado esse erro? Desde já, agradeço.
Cara, provavelmente a sessão já está fechada ou vc está persistindo um objeto que já tem id… tô meio sem tempo mas… dá uma pesquisada na anotação @Transactional
tranquilo… posta o cod do seu DAO ai… itemVendaDAO.inserir(itemVenda); pra avaliar
em todo caso vc pode testar usar saveOrUpdate ao invés de persist no DAO
e a propósito… vc chegou a confirmar no dao se vc está com a sessão aberta ao tentar persistir os objetos?
Camarada, ele está utilizando JPA e, bem, em JPA não existe o saveOrUpdate…
Claro que ele poderia tentar o método merge, mas provavelmente ele terá o mesmo erro.
Veja estes exemplo.