@ManyToMany + Hibernate 4 + Primefaces 3.5

Olá a todos;

estou com dificuldade para fazer o método Salvar() e o formulário que envie os dados para as tabelas do banco de dados;

Tenho as tabelas: itens; itens_fornecedor; fornecedor

Tenho as classes Itens.java e Fornecedor.Java

Preciso fazer um relacionamento muitos para muitos.

Da maneira que esta eu acesso a pagina funcao_fornecedor.xhtml, ele lista os fornecedores cadastrados,

escolho a opção adicionar item ele me redireciona para a pagina adicionar_item_fornecedor.xhtml,

Carrega o nome do fornecedor e o form para inserir o nome do Produto a ser adicionado, até ai tudo bem,

O Problema começa quando peço para salvar, ele só salva na tabela Itens, e não salva na tabela de relacionamento itens_fornecedor.

Vi varios exemplos no google e o mais parecido com o que quero fazer é este aqui:
http://www.guj.com.br/java/256062-resolvido-dificuldade-para-salvar-muitos-para-muitos

Alguém pode me ajudar e me mostrar o que estou fazendo de errado?
Se alguém tiver um exemplo que já tenha utilizado, também ajuda.

Fornecedor.java

package modelo;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
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.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "fornecedor")
public class Fornecedor implements Serializable {

	private static final long serialVersionUID = 2471765773806278661L;
	@Id
	@GeneratedValue
	@Column(name = "cod_fornecedor")
	private Integer cod_fornecedor;
	@Column(name = "nomefantasia")
	private String nomefantasia;
	@Column(name = "razaosocial")
	private String razaosocial;
	@Column(name = "nomecontato")
	private String nomecontato;
	@Column(name = "cnpj")
	private String cnpj;
	@Column(name = "ie")
	private String ie;
	@Column(name = "cep")
	private String cep;
	@Column(name = "endereco")
	private String endereco;
	@Column(name = "numero")
	private String numero;
	@Column(name = "complemento")
	private String complemento;
	@Column(name = "bairro")
	private String bairro;
	@Column(name = "cidade")
	private String cidade;
	@Column(name = "uf")
	private String uf;
	@Column(name = "fone1")
	private String fone1;
	@Column(name = "fone2")
	private String fone2;
	@Column(name = "email")
	private String email;
	@Column(name = "status")
	private boolean status;
	@Column(name = "observacoes")
	private String observacoes;

	@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinTable(name = "itens_fornecedor", joinColumns = { @JoinColumn(name = "cod_fornecedor") }, inverseJoinColumns = { @JoinColumn(name = "cod_itens") })
	private Set<Itens> itens = new HashSet<Itens>();

//Getters and Setters ....

Itens.java

package modelo;

import java.io.Serializable;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name = "itens")
public class Itens implements Serializable {

	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name="cod_itens")
	private Integer cod_itens;
	
	@Column(name="nome")
	private String nome;
	
	@ManyToMany(mappedBy="itens", cascade = CascadeType.ALL, fetch = FetchType.LAZY)  

//Getters and Setters ....

DaoFactory.Java

package util;

import dao.FornecedorDAO;
import dao.FornecedorDAOImpl;
import dao.ItensDAO;
import dao.ItensDAOImpl;

public class DAOFactory {
	
	public static FornecedorDAO criarFornecedorDAO() {
		FornecedorDAOImpl fornecedorDAO = new FornecedorDAOImpl();
		fornecedorDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
		return fornecedorDAO;
	}
	
	public static ItensDAO criarItensDAO() {
		ItensDAOImpl itensDAO = new ItensDAOImpl();
		itensDAO.setSession(HibernateUtil.getSessionFactory().getCurrentSession());
		return itensDAO;
	}
		
}

ItensDAO.java

package dao;

import modelo.Itens;

public interface ItensDAO {

	public void Salvar(Itens itens);

}

ItensDAOImpl.Java

package dao;

import modelo.Itens;

import org.hibernate.Session;

public class ItensDAOImpl implements ItensDAO {
	
	private Session  session;

	public void setSession(Session session) {
		this.session = session;
	}

	public void Salvar(Itens itens) {
		this.session.save(itens);
		
	}

}

Itens.RN

package modelo;

import util.DAOFactory;
import dao.ItensDAO;

public class ItensRN {
	
	private ItensDAO  itensDAO;

	public ItensRN() {
		this.itensDAO = DAOFactory.criarItensDAO();
	}
	
	public void Salvar(Itens itens) {
		this.itensDAO.Salvar(itens);	
	}
}

ItensBean.java

package bean;

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

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import modelo.Itens;
import modelo.ItensRN;

@ManagedBean(name = "itensBean")
@SessionScoped
public class ItensBean implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Itens itens = new Itens();
	private String msg = "";

                private List<Itens> listarItensFornecedor;
	private List<Itens> pesquisarItensFornecedor;

	public List<Itens> getPesquisarItensFornecedor() {
		return pesquisarItensFornecedor;
	}

	public void setPesquisarItensFornecedor(
			List<Itens> pesquisarItensFornecedor) {
		this.pesquisarItensFornecedor = pesquisarItensFornecedor;
	}
	
	public String AdicionarItemFornecedor(){
		return "adicionar_item_fornecedor";
	}
	
		public String Salvar() {

		// Início valida campos que estiver em branco
		FacesContext context = FacesContext.getCurrentInstance();
		String nome = this.itens.getNome();
		nome = nome.replace(" ", "");
		if (nome.isEmpty()) {
			FacesMessage facesMessage = new FacesMessage(
					"O nome do produto deve ser Preenchido.");
			context.addMessage(msg, facesMessage);
			msg += msg;
		}

		if (msg != "") {

			return msg;

		} else {
			// Fim valida campos que estiver em branco

			ItensRN itensRN = new ItensRN();
			itensRN.Salvar(this.itens);

			FacesMessage facesMessage = new FacesMessage(
					"Cadastrado Com sucesso!");
			context.addMessage(null, facesMessage);

			// Serve para resetar o formulário cadastro de cliente
			this.itens = null;

			return null;
		}
	}

	public Itens getItens() {
		return itens;
	}

	public void setItens(Itens itens) {
		this.itens = itens;
	}
}

funcao_fornecedor.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	  xmlns:ui="http://java.sun.com/jsf/facelets"
	  xmlns:h="http://java.sun.com/jsf/html"
	  xmlns:f="http://java.sun.com/jsf/core"
	  xmlns:p="http://primefaces.org/ui">
<h:head>


    <title>Funcionalidades do Fornecedor</title>
</h:head>
 
 <h:body>
 	<ui:composition template="../template/template_admin.xhtml">
 		
 		<ui:define name="principalinterno">	
 		</ui:define><!-- fim principal interno -->
 		
 		
 			<ui:define name="caixa_principal">
 					 <p:panel header="FORNECEDORES">
		 			 <h:form id="listagem">   
      			    		
		 			 <p:dataTable id="datatable" var="fornecedor" value="#{fornecedorBean.listarFornecedor}"  
		 			 			  sortBy="fornecedor.cod_fornecedor" sortOrder="DESCENDING" 	
								  widgetVar="fornecedorTable" style="width:795px; margin-left:-10px;"	paginator="true"
		 			 			  paginatorPosition="bottom" rows="10" emptyMessage="Nenhum Cliente Encontrado!" 
		 			 			  rowsPerPageTemplate="5,10,15,30,60" filteredValue="#{fornecedorBean.pesquisarFornecedor}" 
		 			 			 >	 
		 			 		 
					  <f:facet name="header">
					  <p:button value="Voltar" outcome="index.xhtml"/>
					  <p:commandButton value="Novo fornecedor" action="#{fornecedorBean.AdicionarNovoFornecedor}"/>
					  <h:outputText value="Pesquisar Fornecedor: " style="margin-left:280px;"/>  
					  <p:inputText id="globalFilter" onkeyup="fornecedorTable.filter()" style="width:150px" filterPosition="left"/>  
					  </f:facet>	
					       
		 			   <p:column id="colunaCodigo" filterBy="#{fornecedor.cod_fornecedor}" sortBy="#{fornecedor.cod_fornecedor}"  filterStyle="display:none"  style="width:15px; text-align:center;"> 
			                <f:facet name="header">
			                	<h:outputText value="Cod."/> 
			                </f:facet> 
			                <h:outputText value="#{fornecedor.cod_fornecedor}" id="cod_fornecedor"/>  
		           		</p:column> 
		           		
		           		<p:column id="colunaCnpj" filterBy="#{fornecedor.cnpj}" filterStyle="display:none" style="width:100px; text-align:center;" > 
			                <f:facet name="header">
			                	<h:outputText value="CNPJ"/> 
			                </f:facet> 
			                <h:outputText value="#{fornecedor.cnpj}" id="cnpj"/>  
		           		</p:column> 
		           		
		 			 	<p:column  id="colunaNomefantasia" filterBy="#{fornecedor.nomefantasia}" filterStyle="display:none"  style="text-align:center;"> 
			                <f:facet name="header"> 
			                	<h:outputText value="Nome Fantasia"/> 
			                </f:facet> 
			                <h:outputText value="#{fornecedor.nomefantasia}" id="nomefantasia"/> 
		           		 </p:column> 
		           		 
 
		           		 <p:column id="colunaStatus" style="width:10px; text-align:center;"> 
			                <f:facet name="header"> 
			                	<h:outputText value="Status" id="status"/> 
			                </f:facet>
			               
							<p:commandLink action="#{fornecedorBean.AlterarStatus}" onclick="if(!confirm('Confirma a mudança de Status?')) return false;" update=":listagem">
								<h:graphicImage library="imagem" name="#{fornecedor.status}.png" style="border:0;"/>
								<f:setPropertyActionListener target="#{fornecedorBean.fornecedor}" value="#{fornecedor}"/>
							</p:commandLink>
							<h:outputText rendered="#{fornecedor.status == true}" value=" Ativo" /> 
							<h:outputText rendered="#{fornecedor.status == false}" value=" Inativo" /> 
						
					    </p:column>
					     
					     <p:column  style="width:10px; text-align:center;" exportable="false" > 
			                <f:facet name="header"> 
			                	<h:outputText value="Editar"/> 
			                </f:facet>
			               
							<h:commandLink id="datatable" action="#{fornecedorBean.AlterarFornecedor}" >
								<h:graphicImage library="imagem" name="alterar.gif" style="border:0;"/>
								<f:setPropertyActionListener target="#{fornecedorBean.fornecedor}" value="#{fornecedor}"/>
							</h:commandLink>
					    </p:column>

						<p:column id="colunaadicionaritem" style="width:10px; text-align:center;" exportable="false"> 
			                <f:facet name="header"> 
			                <h:outputText value="+ Item"/> 
			                </f:facet>
							<p:commandLink id="additem" action="#{itensFornecedorBean.AdicionarItemFornecedor}" >  
							<h:graphicImage library="imagem" name="icone_adicionar.png" style="border:0;"/>
							<f:setPropertyActionListener target="#{fornecedorBean.fornecedor}" value="#{fornecedor}"/>
							</p:commandLink>
							
					    </p:column>

					    <p:column id="colunaDetalhes" style="width:10px; text-align:center;" exportable="false"> 
			                <f:facet name="header"> 
			                <h:outputText value="Ver"/> 
			                </f:facet>
							<p:commandLink id="btdetalhes" action="#{fornecedorBean.DetalharFornecedor}" >  
							<h:graphicImage library="imagem" name="icone_detalhes2.png" style="border:0;"/>
							<f:setPropertyActionListener target="#{fornecedorBean.fornecedor}" value="#{fornecedor}"/>
							</p:commandLink>
					    </p:column>
  
       					</p:dataTable>
   						
   						<h:panelGrid columns="2"> 
					    <p:panel header="Exportar Página Atual" style="width:200px; margin-left:-12px;">
				        <h:commandLink>  
				            <p:graphicImage library="imagem" name="excel.png" style="border:none;" title="Exportar para Excel"/>  
				            <p:dataExporter type="xls" target="datatable" encoding="iso-8859-1" fileName="relatorio" pageOnly="true" postProcessor="#{fornecedorBean.PrepararXLS}"/>  
				        </h:commandLink>  
				  
				        <h:commandLink>  
				            <p:graphicImage library="imagem" name="pdf.png" style="border:none;" title="Exportar para PDF" />  
				            <p:dataExporter type="pdf" target="datatable" encoding="iso-8859-1" fileName="relatorio" pageOnly="true" preProcessor="#{fornecedorBean.PrepararPDF}"/>  
				        </h:commandLink> 
				        </p:panel> 
				        
				        <p:panel header="Exportar Todas as Páginas" style="width:200px;">
				        <h:commandLink>  
				            <p:graphicImage library="imagem" name="excel.png" style="border:none;" title="Exportar para Excel"/>  
				            <p:dataExporter type="xls" target="datatable" encoding="iso-8859-1" fileName="relatorio" postProcessor="#{fornecedorBean.PrepararXLS}" />  
				        </h:commandLink>  
				  
				        <h:commandLink>  
				            <p:graphicImage library="imagem" name="pdf.png" style="border:none;" title="Exportar para PDF"/>  
				            <p:dataExporter type="pdf" target="datatable" encoding="iso-8859-1" fileName="relatorio" preProcessor="#{fornecedorBean.PrepararPDF}"/>  
				        </h:commandLink> 
				        </p:panel> 
				        </h:panelGrid>
				       
		 			 </h:form>	
		 			 
 			</p:panel>
 			</ui:define><!-- fim caixa principal --> 
 		

 	</ui:composition>
</h:body>
</html>

adicionar_produto_fornecedor.xhtml

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:ui="http://java.sun.com/jsf/facelets"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.org/ui">
<h:head>
	<title>Cadastro</title>
</h:head>

<h:body>
	<ui:composition template="../template/template_admin.xhtml">

		<ui:define name="principalinterno">
		</ui:define>
		<!-- fim principal interno -->

		<ui:define name="caixa_principal">

			<div id="layout_caixa_principal">

				<p:panel header="ADICIONAR PRODUTO AO FORNECEDOR">
					<h:form id="edicao">

						<p:panel id="panel"
							style="border:none; width:680px; margin-left:20px;">
							<h:panelGrid columns="1">
								<div id="mensagemErro">
									<p:messages
										style="color:#F00; background-color:#FDD; border:#F60 1px solid; padding:3px; width:715px; 
 						font-family:Verdana, Geneva, sans-serif; font-size:12px; margin: 0 auto;" />
								</div>
							</h:panelGrid>

							<h:panelGrid columns="2">

								<h:outputLabel value="Fornecedor:" />
								<h:outputText id="fornecedor"
									value="#{fornecedorBean.fornecedor.nomefantasia}" />

								<h:outputLabel for="nome" value="Nome do Produto:" />
								<p:inputText id="nome"
									value="#{itensFornecedorBean.itensFornecedor.nome}"
									required="true" requiredMessage="Digite o nome do produto."
									size="30" maxlength="30" />

							</h:panelGrid>

							<br />

							<!-- <p:button value="Voltar" outcome="funcao_cliente.xhtml" styleClass="btn_voltar_alterar_cadastro"/> -->

							<p:commandButton id="btn_voltar" update="panel" value="Cadastrar"
								action="#{itensFornecedorBean.Salvar}"
								styleClass="btn_atualizar_funcionario" />


						</p:panel>
					</h:form>
					<h:form id="form_voltar">
						<p:commandButton id="btn" value="Voltar"
							action="#{fornecedorBean.VoltarFornecedor}"
							styleClass="btn_voltar_funcionario" />
					</h:form>
					<br />
				</p:panel>

			</div>
			<!-- Fim cad_usuario -->
		</ui:define>
		<!-- fim caixa principal -->
	</ui:composition>
</h:body>
</html>

Resolvido