Salvar dados em mapeamentos N:N

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?