1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Persistencia com Hibernate

Bom dia galera !

Tenho as seguintes entidades:

package br.com.sistema.entidade;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name="TB_Carrinho")
@IdClass(CarrinhoDeComprasID.class)
public class CarrinhoDeCompras {

    @Id
    @ManyToOne
    @JoinColumn(name="id_produto")
    private Produto produto;
    @Id
    @ManyToOne
    @JoinColumn(name="id_venda")
    private Venda venda;
    private Integer quantidade;

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public Venda getVenda() {
        return venda;
    }

    public void setVenda(Venda venda) {
        this.venda = venda;
    }

    public Integer getQuantidade() {
        return quantidade;
    }

    public void setQuantidade(Integer quantidade) {
        this.quantidade = quantidade;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((produto == null) ? 0 : produto.hashCode());
        result = prime * result
                + ((quantidade == null) ? 0 : quantidade.hashCode());
        result = prime * result + ((venda == null) ? 0 : venda.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        CarrinhoDeCompras other = (CarrinhoDeCompras) obj;
        if (produto == null) {
            if (other.produto != null)
                return false;
        } else if (!produto.equals(other.produto))
            return false;
        if (quantidade == null) {
            if (other.quantidade != null)
                return false;
        } else if (!quantidade.equals(other.quantidade))
            return false;
        if (venda == null) {
            if (other.venda != null)
                return false;
        } else if (!venda.equals(other.venda))
            return false;
        return true;
    }

}
package br.com.sistema.entidade;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name="TB_PRODUTO")
public class Produto implements Serializable{

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    private Integer id;
    private String descricao;
    @Column(name="data_cadastro")
    @Temporal(TemporalType.DATE)
    private Date dataCadastro;
    private Double valor;
    @Column(name="quantidade_vendida")
    private Integer quantidadeVendida = 0;

    //Construtores    
    public Produto(){    
    }

    public Produto(String descricao, Date dataCadastro,
            Double valor) {
        this.descricao = descricao;
        this.dataCadastro = dataCadastro;
        this.valor = valor;
    }

    // Get's e Set's 
    public Integer getId() {
        return id;
    }

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

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Double getValor() {
        return valor;
    }

    public void setValor(Double valor) {
        this.valor = valor;
    }

    public Integer getQuantidadeVendida() {
        return quantidadeVendida;
    }

    public void setQuantidadeVendida(Integer quantidadeVendida) {
        this.quantidadeVendida = quantidadeVendida;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result
                + ((dataCadastro == null) ? 0 : dataCadastro.hashCode());
        result = prime * result
                + ((descricao == null) ? 0 : descricao.hashCode());
        result = prime * result + ((id == null) ? 0 : id.hashCode());
        result = prime
                * result
                + ((quantidadeVendida == null) ? 0 : quantidadeVendida
                        .hashCode());
        result = prime * result + ((valor == null) ? 0 : valor.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Produto other = (Produto) obj;
        if (dataCadastro == null) {
            if (other.dataCadastro != null)
                return false;
        } else if (!dataCadastro.equals(other.dataCadastro))
            return false;
        if (descricao == null) {
            if (other.descricao != null)
                return false;
        } else if (!descricao.equals(other.descricao))
            return false;
        if (id == null) {
            if (other.id != null)
                return false;
        } else if (!id.equals(other.id))
            return false;
        if (quantidadeVendida == null) {
            if (other.quantidadeVendida != null)
                return false;
        } else if (!quantidadeVendida.equals(other.quantidadeVendida))
            return false;
        if (valor == null) {
            if (other.valor != null)
                return false;
        } else if (!valor.equals(other.valor))
            return false;
        return true;
    }


}
package br.com.sistema.entidade;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

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


@Entity
@Table(name="TB_VENDA")
public class Venda implements Serializable{

    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue
    @Column(name="venda_id")
    private Integer vendaId;
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="id_cliente", nullable=false) // No banco esse campo vai se chamar id_cliente | Não pode ser nulo
    private Cliente cliente;
    @OneToMany(mappedBy="venda")
    private List<CarrinhoDeCompras> produto;
    @Column(name="data_venda")
    @Temporal(TemporalType.DATE)
    private Date dataVenda;
    private Double valorTotal;
    @Column(name="flag_venda_ativa")
    private Integer flagVendaAtiva;

    //Construtor
    public Venda(){

    }

    public Venda(List<CarrinhoDeCompras> p, Cliente c){
        this.produto = p;
        this.cliente = c;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public List<CarrinhoDeCompras> getProduto() {
        return produto;
    }

    public void setProduto(List<CarrinhoDeCompras> produto) {
        this.produto = produto;
    }

    public Date getDataVenda() {
        return dataVenda;
    }

    public void setDataVenda(Date dataVenda) {
        this.dataVenda = dataVenda;
    }

    public Integer getVendaId() {
        return vendaId;
    }

    public void setVendaId(Integer vendaId) {
        this.vendaId = vendaId;
    }

    public Double getValorTotal() {
        return valorTotal;
    }

    public void setValorTotal(Double valorTotal) {
        this.valorTotal = valorTotal;
    }

    public Integer getFlagVendaAtiva() {
        return flagVendaAtiva;
    }

    public void setFlagVendaAtiva(Integer flagVendaAtiva) {
        this.flagVendaAtiva = flagVendaAtiva;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((cliente == null) ? 0 : cliente.hashCode());
        result = prime * result
                + ((dataVenda == null) ? 0 : dataVenda.hashCode());
        result = prime * result
                + ((flagVendaAtiva == null) ? 0 : flagVendaAtiva.hashCode());
        result = prime * result + ((produto == null) ? 0 : produto.hashCode());
        result = prime * result
                + ((valorTotal == null) ? 0 : valorTotal.hashCode());
        result = prime * result + ((vendaId == null) ? 0 : vendaId.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Venda other = (Venda) obj;
        if (cliente == null) {
            if (other.cliente != null)
                return false;
        } else if (!cliente.equals(other.cliente))
            return false;
        if (dataVenda == null) {
            if (other.dataVenda != null)
                return false;
        } else if (!dataVenda.equals(other.dataVenda))
            return false;
        if (flagVendaAtiva == null) {
            if (other.flagVendaAtiva != null)
                return false;
        } else if (!flagVendaAtiva.equals(other.flagVendaAtiva))
            return false;
        if (produto == null) {
            if (other.produto != null)
                return false;
        } else if (!produto.equals(other.produto))
            return false;
        if (valorTotal == null) {
            if (other.valorTotal != null)
                return false;
        } else if (!valorTotal.equals(other.valorTotal))
            return false;
        if (vendaId == null) {
            if (other.vendaId != null)
                return false;
        } else if (!vendaId.equals(other.vendaId))
            return false;
        return true;
    }


}

Qual e a bronca que esta acontecendo... Quando eu executo o metodo salvar:

@Override
    public void salvar(Object obj){
        try {
            abrirTransacao();
            this.em.persist(obj);
            fecharECommitarTransacao();
        } catch (Exception e) {
            System.out.println(e.getMessage());
            rollback();
        }
    }

Ele só salva o objeto venda sem as referencias, ou seja, salva na tabela de Vendas mas a de Carrinho fica vazia.Alguém tem alguma solução ou ideia para esse problema? Grato pela atencao

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jpa hibernate java-ee jsf ou faça a sua própria pergunta.