Bom dia pessoal
Ao tentar persistir a minha classe Candidato, da um erro no hibernate de:
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum
at org.hibernate.type.EnumType.nullSafeSet(EnumType.java:123)
at org.hibernate.type.CustomType.nullSafeSet(CustomType.java:155)
at org.hibernate.persister.collection.AbstractCollectionPersister.writeElement(AbstractCollectionPersister.java:867)
at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1257)
at org.hibernate.action.internal.CollectionRecreateAction.execute(CollectionRecreateAction.java:58)
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:362)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:354)
at org.hibernate.engine.spi.ActionQueue.executeActions(ActionQueue.java:279)
at org.hibernate.event.internal.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:326)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:52)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1210)
at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:986)
at com.sun.enterprise.container.common.impl.EntityManagerWrapper.flush(EntityManagerWrapper.java:418)
at empresa.package.dao.AbstractDAO.gravar(AbstractDAO.java:60)
... 91 more
A minha classe é
Candidato.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.modelo.endereco.Endereco;
import empresa.package.modelo.usuario.TipoUsuario;
import empresa.package.modelo.usuario.Usuario;
import empresa.package.modelo.vaga.Funcao;
import empresa.package.util.Util;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.*;
import org.joda.time.DateTime;
/**
*
* @author thales
* @data 25/06/2012
*/
@Entity
@Table(schema = "AcifEmpregos")
public class Candidato extends AbstractModelo implements Usuario {
private static final int NOME_LENGTH = 60;
private static final int EMAIL_LENGTH = 100;
private static final int CPF_LENGTH = 11;
private static final int SENHA_LENGTH = 32;
private static final int RG_LENGTH = 20;
private static final int DEFICIENCIA_LENGTH = 100;
private static final int HABILIDADESQUALIFICACOES_LENGTH = 1024;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(nullable = false, length = NOME_LENGTH)
private String nome;
@Embedded
private Endereco endereco;
@Temporal(javax.persistence.TemporalType.DATE)
private Date dataNascimento;
@Enumerated(EnumType.STRING)
private Sexo sexo;
@Enumerated(EnumType.STRING)
private EstadoCivil estadoCivil;
@Column(length = EMAIL_LENGTH)
private String email;
@Column(length = CPF_LENGTH)
private String cpf;
@Column(length = SENHA_LENGTH)
private String senha;
@Column(length = RG_LENGTH)
private String rg;
private boolean possuiDeficiencia;
@Column(length = DEFICIENCIA_LENGTH)
private String deficiencia;
@ElementCollection(targetClass = Cnh.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoCHN")
@Enumerated(EnumType.STRING)
private List<Cnh> cnh;
@ElementCollection(targetClass = Periodo.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoPeriodo")
@Enumerated(EnumType.STRING)
private List<Periodo> periodo;
private boolean disponivelViagem;
private boolean salarioCombinar;
private double pretensaoSalarial;
@Column(length = HABILIDADESQUALIFICACOES_LENGTH)
private String habilidadesQualificacoes;
@ElementCollection(targetClass = Curso.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoCursos")
private List<Curso> cursos;
@OneToMany(mappedBy = "candidato")
private List<ExperienciaProfissional> experienciaProfissionais;
@ElementCollection(targetClass = Formacao.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoFormacao")
private List<Formacao> formacoes;
@ManyToMany
@JoinTable(schema = "AcifEmpregos", name = "CandidatoFuncaoInteresse")
private List<Funcao> funcoesInteresse;
@ElementCollection(targetClass = Telefone.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoTelefone")
private List<Telefone> telefones;
@ElementCollection(targetClass = IdiomaCandidato.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoIdioma")
private List<IdiomaCandidato> idiomas;
//gets, sets, hashcode e equals removido
}
Endereco.java
package empresa.package.modelo.endereco;
import empresa.package.modelo.AbstractModelo;
import empresa.package.util.Util;
import java.io.Serializable;
import java.util.regex.Pattern;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.ManyToOne;
/**
*
* @author thales
* @data 25/06/2012
*/
@Embeddable
public class Endereco extends AbstractModelo {
private static final int LOGRADOURO_LENGTH = 50;
private static final int COMPLEMENTO_LENGTH = 20;
private static final int BAIRRO_LENGTH = 30;
private static final int CIDADE_LENGTH = 50;
private static final int CEP_LENGTH = 8;
private Integer seqEnderecoGeral;
@Column(nullable = false, length = LOGRADOURO_LENGTH)
private String logradouro;
private Integer numero;
@Column(length = COMPLEMENTO_LENGTH)
private String complemento;
@Column(nullable = false, length = BAIRRO_LENGTH)
private String bairro;
@Column(nullable = false, length = CIDADE_LENGTH)
private String cidade;
@ManyToOne
private Estado estado;
@Column(nullable = false, length = CEP_LENGTH)
private String cep;
//gets, sets, hashcode e equals removido
}
Sexo.java
package empresa.package.modelo.candidato;
/**
*
* @author thales @data 25/06/2012
*/
public enum Sexo {
MASCULINO("Masculino"),
FEMININO("Feminino");
private String descricao;
public String getDescricao() {
return descricao;
}
private Sexo(String descricao) {
this.descricao = descricao;
}
}
EstadoCivil.java
package empresa.package.modelo.candidato;
/**
*
* @author thales @data 25/06/2012
*/
public enum EstadoCivil {
SOLTEIRO("Solteiro (a)"),
CASADO("Casado (a)"),
DIVORCIADO("Divorciado (a)"),
VIUVO ("Viúvo (a)"),
UNIAO_ESTAVEL("União Estável");
private String descricao;
public String getDescricao() {
return descricao;
}
private EstadoCivil(String descricao) {
this.descricao = descricao;
}
}
Cnh.java
package empresa.package.modelo.candidato;
/**
*
* @author thales
* @data 25/06/2012
*/
public enum Cnh {
A("A"), B("B"), C("C"), D("D"), E("E");
private String descricao;
private Cnh(String descricao) {
this.descricao = descricao;
}
public String getDescricao() {
return descricao;
}
}
Periodo.java
package empresa.package.modelo.candidato;
/**
*
* @author thales @data 25/06/2012
*/
public enum Periodo {
MANHA("Manhã"),
TARDE("Tarde"),
NOITE("Noite");
private String descricao;
public String getDescricao() {
return descricao;
}
private Periodo(String descricao) {
this.descricao = descricao;
}
}
Curso.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.util.Util;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author thales
* @data 25/06/2012
*/
@Embeddable
public class Curso extends AbstractModelo {
private static final int DESCRICAO_LENGTH = 60;
@Column(nullable = false, length = DESCRICAO_LENGTH)
private String descricao;
private Integer mesInicial;
private Integer anoInicial;
private Integer mesFinal;
private Integer anoFinal;
private Integer cargaHoraria;
private boolean concluido;
//gets, sets, hashcode e equals removido
}
ExperienciaProfissional.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.modelo.endereco.Endereco;
import empresa.package.modelo.vaga.Area;
import empresa.package.modelo.vaga.Cargo;
import empresa.package.modelo.vaga.Funcao;
import empresa.package.util.Util;
import java.io.Serializable;
import java.util.List;
import javax.persistence.*;
/**
*
* @author thales
* @data 25/06/2012
*/
@Entity
@Table(schema = "AcifEmpregos", name = "CandidatoExpProf")
public class ExperienciaProfissional extends AbstractModelo {
private static final int EMPRESA_LENGTH = 60;
private static final int RESPONSAVEL_LENGTH = 60;
private static final int DESCRICAO_FUNCOES_LENGTH = 1024;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
private Candidato candidato;
@Column(nullable = false, length = EMPRESA_LENGTH)
private String empresa;
@Column(nullable = false, length = RESPONSAVEL_LENGTH)
private String responsavel;
@Embedded
private Endereco endereco;
private Integer mesInicial;
private Integer anoInicial;
private Integer mesFinal;
private Integer anoFinal;
private boolean empregoAtual;
@Column(nullable = false, length = DESCRICAO_FUNCOES_LENGTH)
private String descricaoFuncoes;
@ManyToOne(cascade = CascadeType.ALL, optional = false)
private Area area;
@ManyToMany
@JoinTable(schema = "AcifEmpregos", name = "CandidatoExpProfFuncao")
private List<Funcao> funcao;
@ManyToOne(cascade = CascadeType.ALL, optional = false)
private Cargo cargo;
@ElementCollection(targetClass = Telefone.class)
@CollectionTable(schema = "AcifEmpregos", name = "CandidatoExpProfTelefone")
private List<Telefone> telefones;
//gets, sets, hashcode e equals removido
}
Formacao.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.modelo.endereco.Estado;
import empresa.package.modelo.vaga.Area;
import empresa.package.util.Util;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author thales
* @data 26/06/2012
*/
@Embeddable
public class Formacao extends AbstractModelo {
private static final int DESCRICAO_LENGTH = 100;
private static final int INSTITUICAO_LENGTH = 100;
private static final int CIDADE_LENGTH = 50;
@Column(length = DESCRICAO_LENGTH, nullable = false)
private String descricao;
private Integer mesInicial;
private Integer anoInicial;
private Integer mesFinal;
private Integer anoFinal;
private boolean concluido;
@Column(length = INSTITUICAO_LENGTH, nullable = false)
private String instituicao;
@Column(length = CIDADE_LENGTH, nullable = false)
private String cidade;
@ManyToOne
private Estado estado;
@Enumerated(EnumType.STRING)
private Grau grau;
@ManyToOne
private Area area;
//gets, sets, hashcode e equals removido
}
Funcao.java
package empresa.package.modelo.vaga;
import empresa.package.modelo.AbstractModelo;
import empresa.package.util.Util;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author thales
* @data 25/06/2012
*/
@Entity
@Table(schema = "AcifEmpregos")
public class Funcao extends AbstractModelo {
private static final int DESCRICAO_LENGTH = 100;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(length = DESCRICAO_LENGTH, nullable = false)
private String descricao;
@ManyToOne
private Area area;
//gets, sets, hashcode e equals removido
}
Telefone.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.util.Util;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
/**
*
* @author thales
* @data 25/06/2012
*/
@Embeddable
public class Telefone extends AbstractModelo {
private static final int NUMERO_TAMANHO = 20;
@Column(nullable = false, length = NUMERO_TAMANHO)
private String numero;
@Enumerated(EnumType.STRING)
private TipoTelefone tipoTelefone;
//gets, sets, hashcode e equals removido
}
IdiomaCandidato.java
package empresa.package.modelo.candidato;
import empresa.package.modelo.AbstractModelo;
import empresa.package.modelo.endereco.Estado;
import empresa.package.modelo.vaga.Idioma;
import empresa.package.util.Util;
import java.io.Serializable;
import javax.persistence.*;
/**
*
* @author thales
* @data 25/06/2012
*/
@Embeddable
public class IdiomaCandidato extends AbstractModelo {
private static final int INSTITUICAO_LENGTH = 100;
private static final int CIDADE_LENGTH = 50;
@ManyToOne(optional = false)
private Idioma idioma;
@Enumerated(EnumType.STRING)
private Nivel nivel;
private Integer mesInicial;
private Integer anoInicial;
private Integer mesFinal;
private Integer anoFinal;
private boolean concluido;
@Column(length = INSTITUICAO_LENGTH, nullable = false)
private String instituicao;
@Column(length = CIDADE_LENGTH, nullable = false)
private String cidade;
@ManyToOne
private Estado estado;
//gets, sets, hashcode e equals removido
}