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;
}
}