Converter JSF... de novo

Salve galera do GUJ, venho recorrer a vocês por que já tentei todas as soluções que encontrei aqui e ainda não sei qual o problema.
Estou montando um selectOneMenu com JSF 2.1 + Primefaces e estou obtendo os tradicionais erros de conversão
Erro de conversão ao definir o valor ‘’ para ‘null Converter’.

Estão acontecendo em todos os meus selectOneMenu desta página relacionada ao cadastro de Chamado, ou seja, estou tendo erro nos converters em todas as classes. Como exemplo a classe Chamado abaixo:

@Table(name="chamado",schema="chamados")
@Entity
public class Chamado {
	@SequenceGenerator(name="seq",sequenceName="chamado_sequence")
	@Id @GeneratedValue(generator="seq")
	@Column(name="id")
	private Long id;
	
	@OneToOne(targetEntity=Atendimento.class)
	@JoinColumn(name="atendimento_id")
	private Atendimento atendimento;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_abertura")
	private Date dataAbertura;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_prazo")
	private Date dataPrazo;
	
	@Temporal(TemporalType.DATE)
	@Column(name="data_fechamento")
	private Date dataFechamento;
	
	@ManyToOne
	@JoinColumn(name="item_id")
	private Item item;
	
	@ManyToOne
	@JoinColumn(name="nivel_prioridade_id")
	private NivelPrioridade nivelPrioridade;
	
	@OneToMany(mappedBy="chamado")
	private List<Movimentacao> historico;
	
	@ManyToOne
	@JoinColumn(name="situacao_id", nullable=true)
	private Situacao situacao;
	
	@ManyToOne
	@JoinColumn(name="tipo_contato_id", nullable=true)
	private TipoContato tipoContato;
	
	@ManyToOne
	@JoinColumn(name="solicitante_id")
	private Pessoa solicitante;
	
	@ManyToOne
	@JoinColumn(name="tecnico_id", nullable=true)
	private Tecnico tecnico;
	
	@ManyToOne
	@JoinColumn(name="regional_id")
	private Regional regional;
	
	private String descricao;

       //getters e setters

Na minha view estou motando os selects da seguinte forma:

<h:outputLabel for="categoria">Categoria:</h:outputLabel>
<p:selectOneMenu id="categoria" value="#{chamadoBean.categoria}" converter="categoriaConverter">
	<f:selectItems var="cat" value="#{chamadoBean.categorias}" itemValue="#{cat}" itemLabel="#{cat.nome}"/>
        <p:ajax event="select" update="item"/>
</p:selectOneMenu>
<h:outputLabel for="item">Item:</h:outputLabel>
<p:selectOneMenu id="item" value="#{chamadoBean.item}" converter="itemConverter>
	<f:selectItems value="#{chamadoBean.itens}" var="it" itemValue="#{it}" itemLabel="#{it.nome}"/>
</p:selectOneMenu>

Criei os converters para todos os selects, tais como:

@FacesConverter("categoriaConverter")
public class CategoriaConverter implements Converter{
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
		if (valor.trim().equals("")) {  
            return null;  
        } else {  
            try {  
                Integer id = Integer.parseInt(valor);
                return DAOFactory.getCategoriaDAO().pesqiusarPorId(id);
  
            } catch(NumberFormatException exception) {  
                throw new ConverterException("Erro ao selecionar esta categoria");  
            }
        }  
	}
	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
		
		if (valor == null || valor.equals("")) {  
            return "";  
        } else {  
            return String.valueOf(((Categoria)valor).getId());  
        } 
	}
}

@FacesConverter("itemConverter")
public class ItemConverter implements Converter{
	@Override
	public Object getAsObject(FacesContext arg0, UIComponent arg1, String valor) {
		if (valor.trim().equals("")) {  
            return null;  
        } else {  
            try {  
                Integer id = Integer.parseInt(valor);
                return DAOFactory.getItemDAO().pesqiusarPorId(id);
  
            } catch(NumberFormatException exception) {  
                throw new ConverterException("Erro ao selecionar este item");  
            }
        }  
	}
	@Override
	public String getAsString(FacesContext arg0, UIComponent arg1, Object valor) {
		
		if (valor == null || valor.equals("")) {  
            return "";  
        } else {  
            return String.valueOf(((Item)valor).getId());  
        } 
	}
}

Amigos por favor me ajudem. O que pode estar errado? Já tentei debugar e aparentemente os converters funcionam, mas sempre tenho mensagens de erro de conversão. Existe algum problema com JSF e anotações @ManyToMany da JPA, pois tenho várias classes ManyToMany na aplicação.

Obrigado.

Uma alternativa que te daria menos dor de cabeça seria retornar tipo genérico sem a necessidade de conversão.
Exemplo de como carregar o select:

        public Collection&lt;SelectItem&gt; getCarregarSelect() {
		ArrayList list = new ArrayList();
		Collection&lt;SelectItem&gt; lst = new ArrayList&lt;SelectItem&gt;();
		List&lt;MeuBean&gt; lista = dao.getFromNamedQuery(&quot;MeuBean.findAll&quot;, list); //minha query
		for (int i = 0; i &lt; lista.size(); i++) { //percorro a lista da minha query
                        //eu sei os tipos do meu bean, eu só configuro o select agora, sendo o primeiro valor value
                        //e o segundo o que será exibido
			lst.add(new SelectItem(lista.get(i).getId(), lista.get(i).getTipoServico()));
		}
		return lst;
	}

no select não muda nada, seja prime, rich, etc

&lt;h:selectOneMenu value="#{meuBeanNomeado.valorVinculado}"&gt;
       &lt;f:selectItems value="#{meuBeanNomeado.carregaSelect}"/&gt;                 
&lt;/h:selectOneMenu&gt;

desta forma você pode deixar todos os seus selects.
Fiz de cabeça, se der algun erro deve ser mínimo.
Essa é a forma crua também, você pode fazer 1000 melhorias no código, deixa-lo ainda mais genérico

Se eu não me engano no jsf 2 você não precisa mais usa converter que nem no seu caso, tenta tirar o converter e testa.