Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

ERRO: detached entity passed to persist

Boa tarde,

estou com o erro na hora de persistir minha entidade Pedido, mas o estranho é que isso só ocorre na segunda vez, na primeira ele salva ja na segunda ele da o erro:

detached entity passed to persist: br.com.rprvidros.models.Pedido

minha código de persistência:

            Collection<PedidoItem> itens = this.pedido.getItens();
            pedido.setUsuario(usuario);
            Date time = Calendar.getInstance().getTime();
            pedido.setData_pedido(time);
            pedido.setStatus("ABERTO");
            pedido.setPagamento("PAG-SEGURO");

            Pedido pedidoAdd = pDao.pedidoAdd(pedido);

            for (PedidoItem pedidoItem : itens) {
                pedidoItem.setPedido(pedidoAdd);
                pedidoItem.setProduto(pedidoItem.getProduto());
                pedido.add(pedidoItem);
                itemDao.addPI(pedidoItem);

            }

minha classe pedido:

package br.com.rprvidros.models;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.WebApplicationContext;

@Entity
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION)
public class Pedido {



    @Id @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
    @Temporal(TemporalType.DATE)
    private Date data_pedido;
    private String status;
    private String pagamento;
    private BigDecimal frete;


    @ManyToOne
    @JoinColumn(name="usuario_id")
    private Usuario usuario;

    @OneToMany(fetch = FetchType.EAGER,mappedBy = "pedido", targetEntity = PedidoItem.class)
    private List<PedidoItem> itens = new ArrayList<PedidoItem>();


    @Override
    public String toString() {
        return "Pedido [id=" + id + ", data_pedido=" + data_pedido + ", status=" + status + ", pagamento=" + pagamento
                + ", usuario=" + getUsuario() + ", itens=" + itens + "]";
    }


    public PedidoItem add(PedidoItem item){
        for (PedidoItem pedidoItem : itens) {
            if(pedidoItem.equals(item)){
                pedidoItem.setQuantidade(pedidoItem.getQuantidade()+1);
                return item;
            }
        }
        itens.add(item);
        return item;
    }


    public Integer getQuantidade(PedidoItem item) {
        for (PedidoItem pedidoItem : itens) {
            if (item.equals(itens)) {
                return item.getQuantidade();
            }
        }
        return item.getQuantidade();
    }

    public BigDecimal getTotalItem(PedidoItem item){
        Integer quantidade = this.getQuantidade(item);
        BigDecimal quantidadeTotal = new BigDecimal(quantidade);
        BigDecimal preco = item.getProduto().getPreco();
        return quantidadeTotal.multiply(preco);

    }

    public BigDecimal getTotal(){
        BigDecimal total = BigDecimal.ZERO;
        for (PedidoItem    item : itens) {
            total = total.add(getTotalItem(item));
        }

        return total;
    }

    public BigDecimal getTotalFrete(){
        BigDecimal total = this.getTotal();
        total = total.add(this.getFrete());
        System.out.println();
        return total;

    }


    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }


    public String getStatus() {
        return status;
    }
    public void setStatus(String status) {
        this.status = status;
    }
    public String getPagamento() {
        return pagamento;
    }
    public void setPagamento(String pagamento) {
        this.pagamento = pagamento;
    }
    public Date getData_pedido() {
        return data_pedido;
    }
    public void setData_pedido(Date time) {
        this.data_pedido = time;
    }
    public Collection<PedidoItem> getItens() {
        return itens;
    }

    public int getQuantidade(){
        int quantidade = itens.size();
        return quantidade;

    }

    public void remover(Integer produtoId) {
        Produtos produto = new Produtos();
        produto.setId(produtoId);
        itens.remove(new PedidoItem(produto));
    }


    public Usuario getUsuario() {
        return usuario;
    }


    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }


    public BigDecimal getFrete() {
        return frete;
    }


    public void setFrete(BigDecimal frete) {
        this.frete = frete;
    }
}

se alguém puder me ajudar, muito obrigado.

1 resposta
solução!

Descobri, coloquei o id como null ele gera normal.

obrigado.