Boa tarde, estou com um erro para converter aqui, mais não estou achando o erro, primeiro irei postar o meu selectOneMenu ai explico oque está acontecendo.
<p:outputLabel value="Fornecedor: " for="fornecedor" />
<p:selectOneMenu id="fornecedor" 
        value="#{produtoBean.produto.fornecedor}" filter="true"
        filterMatchMode="contains" required="true" 
        requiredMessage="O campo[FORNECEDOR] é obrigatório" 
        converter="fornecedorConverter">
    <f:selectItem itemValue="" itemLabel="Selecione um fornecedor" /> 
    <f:selectItems value="#{produtoBean.fornecedores}" 
            var="forne" itemLabel="#{forne.descricao}" 
            itemValue="#{forne}" />
</p:selectOneMenu>Como podem ver o meu produto tem um fornecedor, porem para adicionar ele no meu selectOneMenu tive que fazer o converter, porem se vocês olharem o campo é obrigatório, mais quando eu vo no selectOneMenu e escolho um fornecedor e clico em salvar, a minha pagina xhtml acusa que o campo fornecedor é obrigatório, mais eu escolho e mesmo assim acusa isso. Irei postar meus codigos. Aqui está os metodos equal e hash da classe Fornecedor.
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
@SuppressWarnings("serial")
@Entity
@NamedQueries({
    @NamedQuery(name = "Fornecedor.lista", query = "Select f from Fornecedor f")
})
public class Fornecedor implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long codigo;
    private String descricao;
    @OneToMany(mappedBy = "fornecedor")
    private List<Produto> produtos = new ArrayList<Produto>();
    public Long getCodigo() {
        return codigo;
    }
    public void setCodigo(Long codigo) {
        this.codigo = codigo;
    }
    public String getDescricao() {
        return descricao;
    }
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    public List<Produto> getProdutos() {
        return produtos;
    }
    public void setProdutos(List<Produto> produtos) {
        this.produtos = produtos;
    }
    @Override
    public String toString() {
        return "Fornecedor [codigo=" + codigo + ", descricao=" + descricao + ", produtos=" + produtos + "]";
    }
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((codigo == null) ? 0 : codigo.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Fornecedor other = (Fornecedor) obj;
        if (codigo == null) {
            if (other.codigo != null)
                return false;
        } else if (!codigo.equals(other.codigo))
            return false;
        return true;
    }
}Aqui está a minha classe de converter.
@FacesConverter("fornecedorConverter")
public class FornecedorConverter implements Converter {
@Inject
FornecedorDao dao;
    @Override
    public Object getAsObject(FacesContext context, UIComponent component, String valor) {
        try {
            Long codigo = Long.parseLong(valor);
            Fornecedor fornecedor = dao.buscarPorCodigo(codigo);
            return fornecedor;
        } catch (RuntimeException e) {
            return null;
        }
    }
    @Override
    public String getAsString(FacesContext arg0, UIComponent component, Object objeto) {
        try {
            Fornecedor fornecedor = (Fornecedor) objeto;
            Long codigo = fornecedor.getCodigo();
            return codigo.toString();
        }catch (RuntimeException e) {
            return null;
        }    
    }
}Aparentemente está tudo ok, alguém me ajuda por favor.
 
            