2 @onetoMany na mesma classe com Hibernate/JPA

0 respostas
montroni

Pessoal a situação é a seguinte:

Tenho um cadastro de produtos que é igual para todas as lojas, assim como o código de barras/referência mas cada loja tem o seu devido estoque, sendo assim fiz o mapeamento abaixo, ele salva as entidades corretamente só que quando resgato os dados do produto por exemplo através de

em.find(Produto.class, 1);

ele retorna uma list com dados incorretos como se faltasse um join na instrução então tipo:

A.) se o produto tem 3 codigos de barra e 2 linhas de estoque ele retorna 3 estoque ( 1 null e 2 certo ) e 6 codigo de barra (duplica 1 para cada produto)
B.) se o produto tem 1 codigos de barra e 3 linhas de estoque ele retorna 3 estoque ( certo ) e 3 codigos de barras iguais

Alguém teria alguma idéia de onde estou errando ???

Classe Produtos

package entidades;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.*;
import org.hibernate.annotations.IndexColumn;

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

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @OneToMany(cascade = CascadeType.ALL, targetEntity = CodigoBarra.class, mappedBy = "produto", fetch = FetchType.EAGER, orphanRemoval = true)
    private List<CodigoBarra> codigosBarras = new ArrayList<CodigoBarra>();
    @OneToMany(cascade = CascadeType.ALL, targetEntity = Estoque.class, mappedBy = "produtoId", fetch = FetchType.EAGER, orphanRemoval = true)
    @IndexColumn(name = "id",base=1,nullable=false)
    private List<Estoque> estoque = new ArrayList<Estoque>();

    public List<Estoque> getEstoque() {
        return estoque;
    }

    public void setEstoque(List<Estoque> estoque) {
        this.estoque = estoque;
    }

    public Produto() {
    }

    public List<CodigoBarra> getCodigosBarras() {
        return codigosBarras;
    }

    public void setCodigosBarras(List<CodigoBarra> codigosBarras) {
        this.codigosBarras = codigosBarras;
    }

    public int getId() {
        return id;
    }

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

        return observacao;
    }
}

Classe código de barra

package entidades;

import com.towel.el.annotation.Resolvable;
import java.io.Serializable;
import javax.persistence.*;

@Entity
@Table(name="barras")
public class CodigoBarra implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;    
    @ManyToOne(fetch=FetchType.EAGER,targetEntity=Produto.class)
    private Produto produto;
    @Column
    @Resolvable(colName = "codigo")
    private String codigoBarra;
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = false)
    @JoinColumn(name = "matriz", nullable = false)
    private Empresa matriz;

    public Empresa getMatriz() {
        return matriz;
    }

    public void setMatriz(Empresa matriz) {
        this.matriz = matriz;
    }   

    public Produto getProduto() {
        return produto;
    }

    public CodigoBarra() {
    }

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


    public String getCodigoBarra() {
        return codigoBarra;
    }

    public void setCodigoBarra(String codigoBarra) {
        this.codigoBarra = codigoBarra;
    }

    public Integer getId() {
        return id;
    }

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

Classe Estoque

package entidades;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;

@Entity
@Table(name = "estoque")
public class Estoque implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    @OneToOne(cascade = CascadeType.ALL, orphanRemoval = false)
    @JoinColumn(name = "filial", nullable = false)
    private Empresa filial;
    @ManyToOne(fetch = FetchType.EAGER, targetEntity = Produto.class)
    private Produto produtoId;
    @Column(precision = 2)
    private Double valorVenda;
    @Column()
    private Integer estoque;

    public Estoque() {
    }


    public Produto getProdutoId() {
        return produtoId;
    }

    public void setProdutoId(Produto produtoId) {
        this.produtoId = produtoId;
    }

    public Integer getEstoque() {
        return estoque;
    }

    public void setEstoque(Integer estoque) {
        this.estoque = estoque;
    }

    public Empresa getFilial() {
        return filial;
    }

    public void setFilial(Empresa filial) {
        this.filial = filial;
    }

    public Double getValorVenda() {
        return valorVenda;
    }

    public void setValorVenda(Double valorVenda) {
        this.valorVenda = valorVenda;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
}
Criado 8 de julho de 2011
Respostas 0
Participantes 1