Olá a todos,
Tenho um relacionamento N:N entre produto e movimentação de estoque, ou seja, uma movimentação de estoque pode ser feita para vários produtos e um produto pode esta em várias movimentações do estoque.
Assim tenho, movimentação >- movimentacaoProduto -< produto.
Os mapeamentos estão corretos, pois consigo obter os produtos e suas respectivas quantidade de estoque.
O problema esta na hora de “setar” os dados e salvar na tabela movimentacaoProduto.
Segui alguns exemplos em que a tabela n:n, além de existir com seus atributos, ela também tem uma classe separada com os id’s das tabelas envolvidas. Abaixo apresento a forma de como esta funcionando:
movimentacao.java
@Entity
@Table(name="movimentacao"
,catalog="xserv"
)
public class Movimentacao implements java.io.Serializable {
private Integer idmovimentacao;
private Usuario usuario;
private Date dataa;
private Date hora;
private Set entradas = new HashSet(0);
private Set saidas = new HashSet(0);
private Set movimentacaoprodutos = new HashSet(0);
//get set
movimentacaoproduto.java
@Entity
@Table(name="movimentacaoproduto"
,catalog="xserv"
)
public class Movimentacaoproduto implements java.io.Serializable {
private MovimentacaoprodutoId id;
private Produto produto;
private Movimentacao movimentacao;
private Integer qtd;
private Float valorCompraItem;
private Float porcentagemPerda;
//get set
movimentacaoprodutoID.java
@Embeddable
public class MovimentacaoprodutoId implements java.io.Serializable {
private int idmovimentacao;
private int idproduto;
public MovimentacaoprodutoId() {
}
public MovimentacaoprodutoId(int idmovimentacao, int idproduto) {
this.idmovimentacao = idmovimentacao;
this.idproduto = idproduto;
}
@Column(name="idmovimentacao", nullable=false)
public int getIdmovimentacao() {
return this.idmovimentacao;
}
public void setIdmovimentacao(int idmovimentacao) {
this.idmovimentacao = idmovimentacao;
}
@Column(name="idproduto", nullable=false)
public int getIdproduto() {
return this.idproduto;
}
public void setIdproduto(int idproduto) {
this.idproduto = idproduto;
}
produto.java
@Entity
@Table(name="produto"
,catalog="xserv"
)
public class Produto implements java.io.Serializable {
private Integer idproduto;
private Categoria categoria;
private UndMedida undMedida;
private Usuario usuario;
private String nome;
private String liberado;
private Integer estoqueMin;
private Integer qtdASerVendida;
private Float preco;
private String permiteTroca;
private Float vlDiferencaPermitida;
private String composto;
private Set produtocompostosForIdprodutocomposto = new HashSet(0);
private Set produtopedidos = new HashSet(0);
private Set movimentacaoprodutos = new HashSet(0);
private Set produtocompostosForIdproduto = new HashSet(0);
//get set
Mapeamento XML:
movimentacao.hbm.xml
<hibernate-mapping>
<class name="entidades.model.dao.Movimentacao" table="movimentacao" catalog="xserv">
<id name="idmovimentacao" type="java.lang.Integer">
<column name="idmovimentacao" />
<generator class="identity" />
</id>
<many-to-one name="usuario" class="entidades.model.dao.Usuario" fetch="select">
<column name="idusuario" not-null="true" />
</many-to-one>
<property name="dataa" type="date">
<column name="dataa" length="10" />
</property>
<property name="hora" type="time">
<column name="hora" length="8" />
</property>
<set name="entradas" inverse="true">
<key>
<column name="idmovimentacao" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Entrada" />
</set>
<set name="saidas" inverse="true">
<key>
<column name="idmovimentacao" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Saida" />
</set>
<set name="movimentacaoprodutos" inverse="true">
<key>
<column name="idmovimentacao" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Movimentacaoproduto" />
</set>
</class>
</hibernate-mapping>
movimentacaoproduto.hbm.xml
<hibernate-mapping>
<class name="entidades.model.dao.Movimentacaoproduto" table="movimentacaoproduto" catalog="xserv">
<composite-id name="id" class="entidades.model.dao.MovimentacaoprodutoId">
<key-property name="idmovimentacao" type="int">
<column name="idmovimentacao" />
</key-property>
<key-property name="idproduto" type="int">
<column name="idproduto" />
</key-property>
</composite-id>
<many-to-one name="produto" class="entidades.model.dao.Produto" update="false" insert="false" fetch="select">
<column name="idproduto" not-null="true" />
</many-to-one>
<many-to-one name="movimentacao" class="entidades.model.dao.Movimentacao" update="false" insert="false" fetch="select">
<column name="idmovimentacao" not-null="true" />
</many-to-one>
<property name="qtd" type="java.lang.Integer">
<column name="qtd" />
</property>
<property name="valorCompraItem" type="java.lang.Float">
<column name="valor_compra_item" precision="12" scale="0" />
</property>
<property name="porcentagemPerda" type="java.lang.Float">
<column name="porcentagem_perda" precision="12" scale="0" />
</property>
</class>
</hibernate-mapping>
produto.hbm.xml
<hibernate-mapping>
<class name="entidades.model.dao.Produto" table="produto" catalog="xserv">
<id name="idproduto" type="java.lang.Integer">
<column name="idproduto" />
<generator class="identity" />
</id>
<many-to-one name="categoria" class="entidades.model.dao.Categoria" fetch="select">
<column name="idcategoria" not-null="true" />
</many-to-one>
<many-to-one name="undMedida" class="entidades.model.dao.UndMedida" fetch="select">
<column name="idund_medida" not-null="true" />
</many-to-one>
<many-to-one name="usuario" class="entidades.model.dao.Usuario" fetch="select">
<column name="idusuario" not-null="true" />
</many-to-one>
<property name="nome" type="string">
<column name="nome" length="500" />
</property>
<property name="liberado" type="string">
<column name="liberado" length="3" />
</property>
<property name="estoqueMin" type="java.lang.Integer">
<column name="estoque_min" />
</property>
<property name="qtdASerVendida" type="java.lang.Integer">
<column name="qtd_a_ser_vendida" />
</property>
<property name="preco" type="java.lang.Float">
<column name="preco" precision="12" scale="0" />
</property>
<property name="permiteTroca" type="string">
<column name="permite_troca" length="3" />
</property>
<property name="vlDiferencaPermitida" type="java.lang.Float">
<column name="vl_diferenca_permitida" precision="12" scale="0" />
</property>
<property name="composto" type="string">
<column name="composto" length="3" />
</property>
<set name="produtocompostosForIdprodutocomposto" inverse="true">
<key>
<column name="idprodutocomposto" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Produtocomposto" />
</set>
<set name="produtopedidos" inverse="true">
<key>
<column name="idproduto" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Produtopedido" />
</set>
<set name="movimentacaoprodutos" inverse="true">
<key>
<column name="idproduto" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Movimentacaoproduto" />
</set>
<set name="produtocompostosForIdproduto" inverse="true">
<key>
<column name="idproduto" not-null="true" />
</key>
<one-to-many class="entidades.model.dao.Produtocomposto" />
</set>
</class>
</hibernate-mapping>
Alguém por favor pode me ajudar?