JSF - h:selectOneMenu com "Erro de validação: o valor não é válido"

Boa noite, estou iniciando meus estudos em JSF, já pesquisei nos tópicos e nenhuma das soluções sugeridas estão resolvendo o problema de “Erro de validação: o valor não é válido”. Vocês poderiam analisar o código?

Formulário de cadastro:

<h:body>
    Cadastro
    <h:form>
        <h:panelGrid columns="2">
            <h:outputLabel value="Nome: "/>
            <h:inputText id="nome" value="#{inscricaoBean.p.nome}"/>
            <h:outputLabel value="CPF: "/>
            <h:inputText id="cpf" value="#{inscricaoBean.p.cpf}"/>
            <h:outputLabel value="Instituição: "/>
            <h:inputText id="instituicao" value="#{inscricaoBean.p.instituicao}"/>
            <h:outputLabel value="E-mail: "/>
            <h:inputText id="email" value="#{inscricaoBean.p.email}"/>
            <h:outputLabel value="Cidade: "/>
            <h:inputText id="cidade" value="#{inscricaoBean.p.cidade}"/>
            <h:outputLabel value="Senha: "/>
            <h:inputSecret id="senha" value="#{inscricaoBean.p.senha}"/>
            <h:outputLabel value="Confirmar Senha: "/>
            <h:inputSecret id="csenha" value="#{inscricaoBean.p.csenha}"/>
            <h:outputLabel value="Atividades: "/>
            <h:selectOneMenu id="atividde" value="#{inscricaoBean.p.a}" required="true"> 
                <f:converter converterId="atividadeConverter"/>
                <f:selectItems value="#{inscricaoBean.atividades}" var="item" itemValue="#{item.value}" itemLabel="#{item.label}"/>
            </h:selectOneMenu>
            <h:inputHidden/>
            <h:commandButton value="Enviar" action="#{inscricaoBean.adicionar}"/>
        </h:panelGrid>
    </h:form>
</h:body>

Classe Bean:

package br.com.inscricao.bean;

import br.com.inscricao.entity.Atividade;
import br.com.inscricao.entity.Participante;
import br.com.inscricao.dao.InscricaoDAO;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.SelectItem;

ManagedBean
SessionScoped
public class inscricaoBean {

/**
 * Creates a new instance of inscricaoBean
 */
private InscricaoDAO idao = new InscricaoDAO();
private Participante p = new Participante();
private Atividade a;
private List<Participante> participantes;
private List<Atividade> atividades;

public String cadastro(){
    return "cadastro";
}
public String login(){
    return "login";
}
public String administrativo(){
    return "administrativo";
}

public List<Participante> getParticipantes() {
    participantes = idao.getList();
    return participantes;
}
public List<SelectItem> getAtividades() {
    atividades = idao.getaList();
    List<SelectItem> items = new ArrayList<>();
    for (Atividade x : atividades){
        SelectItem s = new SelectItem();
        s.setValue(x.getId());
        s.setLabel(x.getTitulo());
        items.add(s);
    }
    return items;
}
public void adicionar(){
    idao.addInscricao(p);
} 

public String remover(Participante part){
    this.p = part;
    idao.removerInscricao(this.p);
    return "index";
}

public String editar(Participante part){ 
    this.p = part;  
    return "editar";
}

public String atualizar(){ 
    idao.editarInscricao(this.p); 
    return "index";
}

public Participante getP() {
    return p;
}

public void setP(Participante p) {
    this.p = p;
}

public Atividade getA() {
    return a;
}

public void setA(Atividade a) {
    this.a = a;
}

public void setParticipantes(List<Participante> participantes) {
    this.participantes = participantes;
}

}

Classe DAO:

package br.com.inscricao.dao;

import br.com.inscricao.entity.Atividade;
import br.com.inscricao.entity.Participante;
import br.com.inscricao.util.HibernateUtil;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

public class InscricaoDAO {
private Session sessao;
private Transaction transacao;
private List list;
private List aList;

public void addInscricao(Participante i){
    sessao = HibernateUtil.getSessionFactory().openSession();
    transacao = sessao.beginTransaction();
    
    Participante nova = new Participante();
    nova.setNome(i.getNome());
    nova.setCpf(i.getCpf());
    nova.setSenha(i.getSenha());
    nova.setCsenha(i.getCsenha());
    nova.setCidade(i.getCidade());
    nova.setInstituicao(i.getInstituicao());
    nova.setEmail(i.getEmail());
    nova.setA(i.getA());
    
    sessao.save(nova);
    transacao.commit();
}

public void removerInscricao(Participante i){
    sessao = HibernateUtil.getSessionFactory().openSession();
    transacao = sessao.beginTransaction();
    
    sessao.delete(i);
    transacao.commit();
}

public void editarInscricao(Participante i){
    sessao = HibernateUtil.getSessionFactory().openSession();
    transacao = sessao.beginTransaction();
    
    sessao.update(i);
    transacao.commit();
}

public List<Participante> getList() {
    sessao = HibernateUtil.getSessionFactory().openSession();
    transacao = sessao.beginTransaction();

    Criteria consulta = sessao.createCriteria(Participante.class);
    this.list = consulta.list();
    return list;
}

public List<Atividade> getaList() {
    sessao = HibernateUtil.getSessionFactory().openSession();
    transacao = sessao.beginTransaction();

    Criteria consulta = sessao.createCriteria(Atividade.class);
    this.aList = consulta.list();
    return aList;
}

public Atividade carregarAtividade(Integer id){
    sessao = HibernateUtil.getSessionFactory().openSession();
    Criteria consulta = sessao.createCriteria(Atividade.class);
    consulta.add(Restrictions.eq("id", id));
    Atividade a = (Atividade) consulta.uniqueResult();
    return  a;
}

}

Entidades (Participante e Atividade)

package br.com.inscricao.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

Entity
Table(name = “participante”)
public class Participante implements Serializable {
Id
GeneratedValue(strategy = GenerationType.IDENTITY)
private int codigo;
private String nome;
private String cpf;
private String instituicao;
private String email;
private String cidade;
private String senha;
private String csenha;
@OneToOne
private Atividade a;

public Participante() {
}

public int getCodigo() {
    return codigo;
}

public void setCodigo(int codigo) {
    this.codigo = codigo;
}

public String getNome() {
    return nome;
}

public void setNome(String nome) {
    this.nome = nome;
}

public String getCpf() {
    return cpf;
}

public void setCpf(String cpf) {
    this.cpf = cpf;
}

public String getInstituicao() {
    return instituicao;
}

public void setInstituicao(String instituicao) {
    this.instituicao = instituicao;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public String getCidade() {
    return cidade;
}

public void setCidade(String cidade) {
    this.cidade = cidade;
}

public String getSenha() {
    return senha;
}

public void setSenha(String senha) {
    this.senha = senha;
}

public String getCsenha() {
    return csenha;
}

public void setCsenha(String csenha) {
    this.csenha = csenha;
}

public Atividade getA() {
    return a;
}

public void setA(Atividade a) {
    this.a = a;
}


public int hashCode() {
    int hash = 7;
    hash = 19 * hash + this.codigo;
    return hash;
}


public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Participante other = (Participante) obj;
    if (this.codigo != other.codigo) {
        return false;
    }
    return true;
}

}

package br.com.inscricao.entity;

import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

Entity
Table(name = “atividade”)
public class Atividade implements Serializable{
Id
GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String titulo;
private String carga_horaria;
private String tipo;

public Atividade() {
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getTitulo() {
    return titulo;
}

public void setTitulo(String titulo) {
    this.titulo = titulo;
}

public String getCarga_horaria() {
    return carga_horaria;
}

public void setCarga_horaria(String carga_horaria) {
    this.carga_horaria = carga_horaria;
}

public String getTipo() {
    return tipo;
}

public void setTipo(String tipo) {
    this.tipo = tipo;
}


public int hashCode() {
    int hash = 5;
    hash = 89 * hash + this.id;
    return hash;
}


public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Atividade other = (Atividade) obj;
    if (this.id != other.id) {
        return false;
    }
    return true;
}

}

obs. tive que tirar as anotações pq não permitia o envio aqui :expressionless:
Agradeço o retorno![details=Summary]This text will be hidden[/details]

Será que isso ajuda?

Já tinha lido e acompanhado o tópico sugerido @drsmachado , não resolveu meu problema, dei um printfln() no retorno do equals e ele retorna true, garantindo que meu objeto é igual, testei o retorno e também está de acordo, creio que o problema seja outro! Você me sugere outra coisa?