Erro ao salvar objeto (detached entity passed to persist) [resolvido]

Ola pessoal
Bem estou com um problema aqui na hora de salvar uma “venda”, e nao sei o que tem de errado…
Primeiro eu conseguia salvar uma venda e um produto na tabela itens… mesmo tendo vários produtos… mas agora tem o erro antes mesmo de salvar a venda

obs: em @manytoOne eu coloquei a anotacao (cascade = CascadeType.ALL ,fetch=FetchType.LAZY), antes nao tinha nada era somente o @ManyToOne
mas o erro persiste

tvz se alguem puder me ajudar???
obrigado
=]

codigo botao “Efetuar Venda”

[code]
//inicia um nova venda
Venda venda = new Venda();
//busca por cliente
Cliente cliente = daoCliente.buscaPorCodigo(1);//Integer.parseInt(jtfCodigoCliente.getText()));
int codigoVenda = Integer.parseInt(jtfCodigoVenda.getText());
venda.setCliente(cliente);
//seta alguns atributos da venda
venda.setDataPrevista(MetodosVisual.data_deStringParaBanco(jtfDataPosVenda.getText()));
venda.setDataVenda(MetodosVisual.data_deStringParaBanco(jtfDataAtual.getText()));
venda.setDescricaoServico(jtpDescricaoDoServico.getText());
venda.setFlag(2);
venda.setObservacao(jtpObservacoes.getText());
venda.setPrecoFinal(Float.parseFloat(jtfPrecoFinal.getText()));

    int linhas = dtmitens.getRowCount();
    Itens itens = new Itens();

//percorre as linhas da tabela pra ver quantos produtos foram selecionados
for (int i = 0; i < linhas; i++) {
int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
itens.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
itens.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
itens.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
itens.setVenda(venda);
itens.setProduto(produto);
//depois de setados a venda e produto pra tabela itens adiciona o “itens” na venda
venda.addItens(itenss);
}
//salva venda no banco… (a venda na tabela venda, e na tabela itens o codigo_venda, codigo_produto etc)
daoVenda.salvarVenda(venda);

    [/code]

classe itens

package org.iVitrim.model;

import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;


/**
 * Classe de entidade Itens
 *
 * @author Tiago Link
 */
@Entity
@Table(name = "itens")
@NamedQueries( {
    @NamedQuery(name = "Itens.findByCodigo", query = "SELECT i FROM Itens i WHERE i.codigo = :codigo"),
    @NamedQuery(name = "Itens.findByQuantidade", query = "SELECT i FROM Itens i WHERE i.quantidade = :quantidade"),
    @NamedQuery(name = "Itens.findByPrecoTotal", query = "SELECT i FROM Itens i WHERE i.precoTotal = :precoTotal"),
    @NamedQuery(name = "Itens.findByPrecoUnitario", query = "SELECT i FROM Itens i WHERE i.precoUnitario = :precoUnitario"),
    @NamedQuery(name = "Itens.find", query = "SELECT i FROM Itens i")
})
public class Itens implements Serializable {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "CODIGO", nullable = false)
    private Integer codigo;
    
    @Column(name = "QUANTIDADE")
    private Integer quantidade;
    
    @Column(name = "PRECO_TOTAL")
    private Float precoTotal;
    
    @Column(name = "PRECO_UNITARIO")
    private Float precoUnitario;
    
    @JoinColumn(name = "VENDA_CODIGO", referencedColumnName = "CODIGO")
    @ManyToOne(cascade =  CascadeType.ALL ,fetch=FetchType.LAZY)
    private Venda vendaCodigo;
    
    @JoinColumn(name = "PRODUTO_CODIGO", referencedColumnName = "CODIGO")
    @ManyToOne(cascade =  CascadeType.ALL ,fetch=FetchType.LAZY)
    private Produto produtoCodigo;
    
    /** Creates a new instance of Itens */
    public Itens() {
    }
    
    /**
     * Cria uma nova instância de Itens com os valores especificados.
     * @param codigo o codigo do Itens
     */
    public Itens(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Define o codigo deste Itens.
     * @return o codigo
     */
    public Integer getCodigo() {
        return this.codigo;
    }
    
    /**
     * Define o codigo deste Itens para o valor especificado.
     * @param codigo o novo codigo
     */
    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Define o quantidade deste Itens.
     * @return o quantidade
     */
    public Integer getQuantidade() {
        return this.quantidade;
    }
    
    /**
     * Define o quantidade deste Itens para o valor especificado.
     * @param quantidade o novo quantidade
     */
    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }
    
    /**
     * Define o precoTotal deste Itens.
     * @return o precoTotal
     */
    public Float getPrecoTotal() {
        return this.precoTotal;
    }
    
    /**
     * Define o precoTotal deste Itens para o valor especificado.
     * @param precoTotal o novo precoTotal
     */
    public void setPrecoTotal(Float precoTotal) {
        this.precoTotal = precoTotal;
    }
    
    /**
     * Define o precoUnitario deste Itens.
     * @return o precoUnitario
     */
    public Float getPrecoUnitario() {
        return this.precoUnitario;
    }
    
    /**
     * Define o precoUnitario deste Itens para o valor especificado.
     * @param precoUnitario o novo precoUnitario
     */
    public void setPrecoUnitario(Float precoUnitario) {
        this.precoUnitario = precoUnitario;
    }
    
    /**
     * Define o vendaCodigo deste Itens.
     * @return o vendaCodigo
     */
    public Venda getVenda() {
        return this.vendaCodigo;
    }
    
    /**
     * Define o vendaCodigo deste Itens para o valor especificado.
     * @param vendaCodigo o novo vendaCodigo
     */
    public void setVenda(Venda venda) {
        this.vendaCodigo = venda;
    }
    
    /**
     * Define o produtoCodigo deste Itens.
     * @return o produtoCodigo
     */
    public Produto getProduto() {
        return this.produtoCodigo;
    }
    
    /**
     * Define o produtoCodigo deste Itens para o valor especificado.
     * @param produtoCodigo o novo produtoCodigo
     */
    public void setProduto(Produto produto) {
        this.produtoCodigo = produto;
    }
    
    /**
     * Retorna um valor de código hash para o objeto.  Esta implementação computa
     * um valor de código hash baseado nos campos id deste objeto.
     * @return um valor de código hash para este objeto.
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }
    
    /**
     * Determina se outro objeto é igual a este Itens.  O resultado é
     * <code>true</code> se e somente se o argumento não for nulo e for um objeto Itens o qual
     * tem o mesmo valor para o campo id como este objeto.
     * @param object o objeto de referência com o qual comparar
     * @return <code>true</code> se este objeto é o mesmo como o argumento;
     * <code>false</code> caso contrário.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Itens)) {
            return false;
        }
        Itens other = (Itens)object;
        if (this.codigo != other.codigo && (this.codigo == null || !this.codigo.equals(other.codigo))) return false;
        return true;
    }
    
    /**
     * Retorna uma representação literal deste objeto.  Esta implementação cria
     * uma representação baseada nos campos id.
     * @return uma representação literal deste objeto.
     */
    @Override
    public String toString() {
        return "org.iVitrim.model.Itens[codigo=" + codigo + "]";
    }
    
}

classe venda

/*
 * Venda.java
 *
 * Created on 18 de Outubro de 2007, 23:44
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.iVitrim.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import javax.persistence.CascadeType;
import javax.persistence.Column;
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.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;




/**
 * Classe de entidade Venda
 *
 * @author Tiago Link
 */
@Entity
@Table(name = "venda")
@NamedQueries( {
    @NamedQuery(name = "Venda.findByCodigo", query = "SELECT v FROM Venda v WHERE v.codigo = :codigo"),
    @NamedQuery(name = "Venda.findByDataVenda", query = "SELECT v FROM Venda v WHERE v.dataVenda = :dataVenda"),
    @NamedQuery(name = "Venda.findByDataPrevista", query = "SELECT v FROM Venda v WHERE v.dataPrevista = :dataPrevista"),
    @NamedQuery(name = "Venda.findByPrecoFinal", query = "SELECT v FROM Venda v WHERE v.precoFinal = :precoFinal"),
    @NamedQuery(name = "Venda.findByFlag", query = "SELECT v FROM Venda v WHERE v.flag = :flag"),
    @NamedQuery(name = "Venda.find", query = "SELECT v FROM Venda v order by v.dataVenda")
})
public class Venda implements Serializable {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "CODIGO", nullable = false)
    private Integer codigo;
    
    @Column(name = "DATA_VENDA")
    @Temporal(TemporalType.DATE)
    private Date dataVenda;
    
    @Column(name = "DATA_PREVISTA")
    @Temporal(TemporalType.DATE)
    private Date dataPrevista;
    
    @Lob
    @Column(name = "DESCRICAO_SERVICO")
    private String descricaoServico;
    
    @Lob
    @Column(name = "OBSERVACAO")
    private String observacao;
    
    @Column(name = "PRECO_FINAL")
    private Float precoFinal;
    
    @Column(name = "FLAG")
    private Integer flag;
    
    @OneToMany(cascade =  CascadeType.ALL, mappedBy = "vendaCodigo")
    private Collection<Feedback> feedbackCollection;
    
    @JoinColumn(name = "CLIENTE_CODIGO", referencedColumnName = "CODIGO")
    @ManyToOne(cascade =  CascadeType.ALL ,fetch=FetchType.LAZY)
    private Cliente clienteCodigo;
    
    @OneToMany(cascade =  CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "vendaCodigo")
    private Collection<Pgto> pgtoCollection;
    
    @OneToMany(cascade =  CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "vendaCodigo")
    private Collection<Itens> itensCollection;
    
    /** Creates a new instance of Venda */
    public Venda() {
    }
    
    /**
     * Cria uma nova instância de Venda com os valores especificados.
     * @param codigo o codigo do Venda
     */
    public Venda(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Define o codigo deste Venda.
     * @return o codigo
     */
    public Integer getCodigo() {
        return this.codigo;
    }
    
    /**
     * Define o codigo deste Venda para o valor especificado.
     * @param codigo o novo codigo
     */
    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Define o dataVenda deste Venda.
     * @return o dataVenda
     */
    public Date getDataVenda() {
        return this.dataVenda;
    }
    
    /**
     * Define o dataVenda deste Venda para o valor especificado.
     * @param dataVenda o novo dataVenda
     */
    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }
    
    /**
     * Define o descricaoServico deste Venda.
     * @return o descricaoServico
     */
    public String getDescricaoServico() {
        return this.descricaoServico;
    }
    
    /**
     * Define o descricaoServico deste Venda para o valor especificado.
     * @param descricaoServico o novo descricaoServico
     */
    public void setDescricaoServico(String descricaoServico) {
        this.descricaoServico = descricaoServico;
    }
    
    /**
     * Define o observacao deste Venda.
     * @return o observacao
     */
    public String getObservacao() {
        return this.observacao;
    }
    
    /**
     * Define o observacao deste Venda para o valor especificado.
     * @param observacao o novo observacao
     */
    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }
    
    /**
     * Define o precoFinal deste Venda.
     * @return o precoFinal
     */
    public Float getPrecoFinal() {
        return this.precoFinal;
    }
    
    /**
     * Define o precoFinal deste Venda para o valor especificado.
     * @param precoFinal o novo precoFinal
     */
    public void setPrecoFinal(Float precoFinal) {
        this.precoFinal = precoFinal;
    }
    
    /**
     * Define o flag deste Venda.
     * @return o flag
     */
    public Integer getFlag() {
        return this.flag;
    }
    
    /**
     * Define o flag deste Venda para o valor especificado.
     * @param flag o novo flag
     */
    public void setFlag(Integer flag) {
        this.flag = flag;
    }
    
    /**
     * Define o feedbackCollection deste Venda.
     * @return o feedbackCollection
     */
    public Collection<Feedback> getFeedbackCollection() {
        return this.feedbackCollection;
    }
    
    /**
     * Define o feedbackCollection deste Venda para o valor especificado.
     * @param feedbackCollection o novo feedbackCollection
     */
    public void setFeedbackCollection(Collection<Feedback> feedbackCollection) {
        this.feedbackCollection = feedbackCollection;
    }
    
    /**
     * Define o clienteCodigo deste Venda.
     * @return o clienteCodigo
     */
    public Cliente getCliente() {
        return this.clienteCodigo;
    }
    
    /**
     * Define o clienteCodigo deste Venda para o valor especificado.
     * @param clienteCodigo o novo clienteCodigo
     */
    public void setCliente(Cliente cliente) {
        this.clienteCodigo = cliente;
    }
    
    /**
     * Define o pgtoCollection deste Venda.
     * @return o pgtoCollection
     */
    public Collection<Pgto> getPgtoCollection() {
        return this.pgtoCollection;
    }
    
    /**
     * Define o pgtoCollection deste Venda para o valor especificado.
     * @param pgtoCollection o novo pgtoCollection
     */
    public void setPgtoCollection(Collection<Pgto> pgtoCollection) {
        this.pgtoCollection = pgtoCollection;
    }
    
    /**
     * Define o itensCollection deste Venda.
     * @return o itensCollection
     */
    public Collection<Itens> getItensCollection() {
        return this.itensCollection;
    }
    
    /**
     * Define o itensCollection deste Venda para o valor especificado.
     * @param itensCollection o novo itensCollection
     */
    public void setItensCollection(Collection<Itens> itensCollection) {
        this.itensCollection = itensCollection;
    }
    
    public void addItens(Itens item){
        if(this.itensCollection == null){
            this.itensCollection = new ArrayList<Itens>();
        }
        this.itensCollection.add(item);
    }
    
    public void addPdto(Pgto pagamento){
        if(this.pgtoCollection == null){
            this.pgtoCollection = new ArrayList<Pgto>();
        }
        this.pgtoCollection.add(pagamento);
    }
    
    /**
     * Retorna um valor de código hash para o objeto.  Esta implementação computa
     * um valor de código hash baseado nos campos id deste objeto.
     * @return um valor de código hash para este objeto.
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }
    
    /**
     * Determina se outro objeto é igual a este Venda.  O resultado é
     * <code>true</code> se e somente se o argumento não for nulo e for um objeto Venda o qual
     * tem o mesmo valor para o campo id como este objeto.
     * @param object o objeto de referência com o qual comparar
     * @return <code>true</code> se este objeto é o mesmo como o argumento;
     * <code>false</code> caso contrário.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Venda)) {
            return false;
        }
        Venda other = (Venda)object;
        if (this.codigo != other.codigo && (this.codigo == null || !this.codigo.equals(other.codigo))) return false;
        return true;
    }
    
    /**
     * Retorna uma representação literal deste objeto.  Esta implementação cria
     * uma representação baseada nos campos id.
     * @return uma representação literal deste objeto.
     */
    @Override
    public String toString() {
        return "org.iVitrim.model.Venda[codigo=" + codigo + "]";
    }
    
    public Date getDataPrevista() {
        return dataPrevista;
    }
    
    public void setDataPrevista(Date dataPrevista) {
        this.dataPrevista = dataPrevista;
    }
    
}

classe produto

/*
 * Produto.java
 *
 * Created on 18 de Outubro de 2007, 23:44
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package org.iVitrim.model;

import java.io.Serializable;
import java.util.Collection;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;



/**
 * Classe de entidade Produto
 *
 * @author Tiago Link
 */
@Entity
@Table(name = "produto")
@NamedQueries( {
    @NamedQuery(name = "Produto.findByCodigo", query = "SELECT p FROM Produto p WHERE p.codigo = :codigo"),
    @NamedQuery(name = "Produto.findByNome", query = "SELECT p FROM Produto p WHERE p.nome LIKE :nome"),
    @NamedQuery(name = "Produto.findByUnidadeMedida", query = "SELECT p FROM Produto p WHERE p.unidadeMedida = :unidadeMedida"),
    @NamedQuery(name = "Produto.findByPrecoUnitario", query = "SELECT p FROM Produto p WHERE p.precoUnitario = :precoUnitario"),
    @NamedQuery(name = "Produto.find", query = "SELECT p FROM Produto p")
})
public class Produto implements Serializable {
    
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "CODIGO", nullable = false)
    private Integer codigo;
    
    @Column(name = "NOME", nullable = false)
    private String nome;
    
    @Column(name = "UNIDADE_MEDIDA", nullable = false)
    private String unidadeMedida;
    
    @Column(name = "PRECO_UNITARIO", nullable = false)
    private float precoUnitario;
    
    @OneToMany(cascade =  CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "produtoCodigo")
    private Collection<Itens> itensCollection;
    
    /** Creates a new instance of Produto */
    public Produto() {
    }
    
    /**
     * Cria uma nova instância de Produto com os valores especificados.
     * @param codigo o codigo do Produto
     */
    public Produto(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Cria uma nova instância de Produto com os valores especificados.
     * @param codigo o codigo do Produto
     * @param nome o nome do Produto
     * @param unidadeMedida o unidadeMedida do Produto
     * @param precoUnitario o precoUnitario do Produto
     */
    public Produto(Integer codigo, String nome, String unidadeMedida, float precoUnitario) {
        this.codigo = codigo;
        this.nome = nome;
        this.unidadeMedida = unidadeMedida;
        this.precoUnitario = precoUnitario;
    }
    
    /**
     * Define o codigo deste Produto.
     * @return o codigo
     */
    public Integer getCodigo() {
        return this.codigo;
    }
    
    /**
     * Define o codigo deste Produto para o valor especificado.
     * @param codigo o novo codigo
     */
    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }
    
    /**
     * Define o nome deste Produto.
     * @return o nome
     */
    public String getNome() {
        return this.nome;
    }
    
    /**
     * Define o nome deste Produto para o valor especificado.
     * @param nome o novo nome
     */
    public void setNome(String nome) {
        this.nome = nome;
    }
    
    /**
     * Define o unidadeMedida deste Produto.
     * @return o unidadeMedida
     */
    public String getUnidadeMedida() {
        return this.unidadeMedida;
    }
    
    /**
     * Define o unidadeMedida deste Produto para o valor especificado.
     * @param unidadeMedida o novo unidadeMedida
     */
    public void setUnidadeMedida(String unidadeMedida) {
        this.unidadeMedida = unidadeMedida;
    }
    
    /**
     * Define o precoUnitario deste Produto.
     * @return o precoUnitario
     */
    public float getPrecoUnitario() {
        return this.precoUnitario;
    }
    
    /**
     * Define o precoUnitario deste Produto para o valor especificado.
     * @param precoUnitario o novo precoUnitario
     */
    public void setPrecoUnitario(float precoUnitario) {
        this.precoUnitario = precoUnitario;
    }
    
    /**
     * Define o itensCollection deste Produto.
     * @return o itensCollection
     */
    public Collection<Itens> getItensCollection() {
        return this.itensCollection;
    }
    
    /**
     * Define o itensCollection deste Produto para o valor especificado.
     * @param itensCollection o novo itensCollection
     */
    public void setItensCollection(Collection<Itens> itensCollection) {
        this.itensCollection = itensCollection;
    }
    
    /**
     * Retorna um valor de código hash para o objeto.  Esta implementação computa
     * um valor de código hash baseado nos campos id deste objeto.
     * @return um valor de código hash para este objeto.
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (this.codigo != null ? this.codigo.hashCode() : 0);
        return hash;
    }
    
    /**
     * Determina se outro objeto é igual a este Produto.  O resultado é
     * <code>true</code> se e somente se o argumento não for nulo e for um objeto Produto o qual
     * tem o mesmo valor para o campo id como este objeto.
     * @param object o objeto de referência com o qual comparar
     * @return <code>true</code> se este objeto é o mesmo como o argumento;
     * <code>false</code> caso contrário.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Produto)) {
            return false;
        }
        Produto other = (Produto)object;
        if (this.codigo != other.codigo && (this.codigo == null || !this.codigo.equals(other.codigo))) return false;
        return true;
    }
    
    /**
     * Retorna uma representação literal deste objeto.  Esta implementação cria
     * uma representação baseada nos campos id.
     * @return uma representação literal deste objeto.
     */
    @Override
    public String toString() {
        return "org.iVitrim.model.Produto[codigo=" + codigo + "]";
    }
    
}

o ERRO

init:
deps-jar:
Compiling 4 source files to D:\programacao\Aula\Projeto_iVitrim\iVitrim\build\classes
compile:
run:
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: org.iVitrim.model.Cliente
        at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:219)
        at org.iVitrim.dao.DAOVenda.salvarVenda(DAOVenda.java:41)
        at org.iVitrim.telas.Vendas.jbtEfetuarVendaActionPerformed(Vendas.java:946)
        at org.iVitrim.telas.Vendas.access$1500(Vendas.java:31)
        at org.iVitrim.telas.Vendas$18.actionPerformed(Vendas.java:603)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Container.processEvent(Container.java:2058)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Container.dispatchEventImpl(Container.java:2116)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
        at java.awt.Container.dispatchEventImpl(Container.java:2102)
        at java.awt.Window.dispatchEventImpl(Window.java:2429)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Caused by: org.hibernate.PersistentObjectException: detached entity passed to persist: org.iVitrim.model.Cliente
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:79)
        at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:609)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:601)
        at org.hibernate.engine.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:30)
        at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
        at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:216)
        at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:169)
        at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
        at org.hibernate.event.def.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:431)
        at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:265)
        at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
        at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
        at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:49)
        at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:131)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:87)
        at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:38)
        at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:618)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:592)
        at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:596)
        at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:213)
        ... 29 more

Eu não li o código, mas o erro "detached entity passed to persist: org.iVitrim.model.Cliente "

Diz o seguinte: “Eu, hibernate da Silva Sauro, não recebi a classe Cliente para ser persistida - ela está vinculada a classe venda que eu estou tentando persistir”. Veja o código da DAO de vendas. ( org.iVitrim.dao.DAOVenda.salvarVenda(DAOVenda.java) )

Maaaaaaaas você poderia ter olhado no oráculo, hein? 8)

=]

obrigado Cintia…

eu olhei no “oráculo” nao “encontrei nada” que me ajudasse

sua dica pode ter clareado um pouco minha mente
hehe

esqueci de postar antes…
DAOVenda

EntityManagerFactory emf = Persistence.createEntityManagerFactory("iVitrimPU");
static EntityManager em = emf.createEntityManager();
    
    public void salvarVenda(Venda venda){
        if(!em.isOpen()){
        em = emf.createEntityManager();
        }
        em.getTransaction().begin();
        try {
            em.persist(venda);
            em.getTransaction().commit();
            JOptionPane.showMessageDialog(null,"Venda salva com sucesso!","Aviso",JOptionPane.INFORMATION_MESSAGE);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Erro ao salvar a venda","Atenção!",JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

vou revisar o codigo novamente

vlw

Está vendo a linha "em.persist(venda); "

Então, não basta persistir apenas a instancia venda; tem que persistir as que a compoem tb. Por exemplo (ok, ignore por enquanto a modelagem), você poderia colocar o código:

em.persist(venda); 
em.persist(venda.getCliente());
(... e demais objetos que fazem parte de venda ... )

ou

em.persist(venda); 
em.merge(venda.getCliente());
(... e demais objetos que fazem parte de venda ... )

Eu não tenho certeza se colocar tudo isso na classe VendaDAO é politicamente correto (até acredito que não o seja). Mas é para vc entender qual o erro. :slight_smile:

ola
eu fiz o que vc sugeriu porem o erro continua (detached entity passed to persist: org.iVitrim.model.Cliente)

classe cliente

@JoinColumn(name = "CIDADE_CODIGO", referencedColumnName = "CODIGO")
    @ManyToOne(cascade =  CascadeType.ALL ,fetch=FetchType.LAZY)
    private Cidade cidade;
    
    @OneToMany(cascade =  CascadeType.ALL,fetch=FetchType.LAZY, mappedBy = "cliente")
    private Collection<Venda> vendaCollection;

o erro da no persist do metodo salvar venda

as anotaçoes em ManyToOne e OneToMany estao corretas?
cascade… fetch…?

vlw

ola
obrigado pelas dicas… consegui resolver =]

solucao:

antes (cod. botao)

daoVenda.salvarVenda(venda);//
int linhas = dtmitens.getRowCount();
VendaProduto vendaProduto = new VendaProduto();//
        for (int i = 0; i < linhas; i++) {
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            vendaProduto.setProduto(produto);
            vendaProduto.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            vendaProduto.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            vendaProduto.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            vendaProduto.setVenda(venda);
            daoVendaProduto.salvarVendaProduto(vendaProduto);//
        }
        

depois …

metodo

public void addVendaProduto(VendaProduto vendaProduto){
        if(this.vendaProdutoCollection == null){
            this.vendaProdutoCollection = new ArrayList<VendaProduto>();
        }
        this.vendaProdutoCollection.add(vendaProduto);
    }

cod.botao

int linhas = dtmitens.getRowCount();
        for (int i = 0; i < linhas; i++) {
            VendaProduto vendaProduto = new VendaProduto();//motivo do problema... ¬¬
            int codigoProduto = Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,0)));
            Produto produto = daoProduto.buscaPorCodigo(codigoProduto);
            vendaProduto.setProduto(produto);
            vendaProduto.setPrecoTotal(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,5))));
            vendaProduto.setPrecoUnitario(Float.parseFloat(String.valueOf(dtmitens.getValueAt(i,4))));
            vendaProduto.setQuantidade(Integer.parseInt(String.valueOf(dtmitens.getValueAt(i,2))));
            vendaProduto.setVenda(venda);
            venda.addVendaProduto(vendaProduto);//
        }
        daoVenda.salvarVenda(venda);//

se alguem tiver o mesmo problema tvz ajude…

vlw