Jpa ElementCollection Enumerated Conversion Error ao Gravar

2 respostas
tebosoftware

Boa tarde pessoal

estou com problema ao persistir uma classe que tem um ElementCollection de Enum. A propriedade é a classificacoes (Set<Classificacao> classificacoes)

da o erro:

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:811)
	at org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1201)
	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:1127)
	at org.hibernate.ejb.AbstractEntityManagerImpl.flush(AbstractEntityManagerImpl.java:974)
	at br.com.tebosoftware.dao.AbstractDAO.gravar(AbstractDAO.java:55)
	... 44 more

A classe é esta abaixo:

Pessoa.java

package br.com.tebosoftware.modelo.pessoa;

import br.com.tebosoftware.modelo.ValidacaoException;
import br.com.tebosoftware.modelo.acesso.Permissao;
import br.com.tebosoftware.modelo.acesso.Usuario;
import br.com.tebosoftware.modelo.endereco.Endereco;
import br.com.tebosoftware.util.Util;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.*;

/**
 *
 * @author thales @data 05/03/2012
 */
@Entity
public class Pessoa extends Usuario {

    public static final int LENGTH_RAZAO_SOCIAL = 50;
    public static final int LENGTH_FANTASIA = 50;
    public static final int LENGTH_CPF = 11;
    public static final int LENGTH_CNPJ = 14;
    public static final int LENGTH_RG = 20;
    public static final int LENGTH_INSCRICAO_ESTADUAL = 20;

    //é nesta propriedade que está dando o erro.
    @ElementCollection(fetch = FetchType.LAZY, targetClass = Classificacao.class)
    @Enumerated(EnumType.STRING)
    @Column(name = "classificacao", length = 20)
    private Set&lt;Classificacao&gt; classificacoes = new HashSet&lt;Classificacao&gt;();
    @Column(length = LENGTH_RAZAO_SOCIAL)
    private String razaoSocial;
    @Column(length = LENGTH_FANTASIA)
    private String fantasia;
    @ManyToOne(fetch = FetchType.EAGER, optional = false, cascade = {CascadeType.MERGE})
    private Endereco endereco;
    private int numero;
    @Enumerated(EnumType.STRING)
    @Column(length = 20)
    private TipoPessoa tipoPessoa = TipoPessoa.FISICA;
    @AttributeOverride(name = "valor", column =
    @Column(name = "cpf", length = LENGTH_CPF))
    private Cpf cpf;
    @AttributeOverride(name = "valor", column =
    @Column(name = "cnpj", length = LENGTH_CNPJ))
    private Cnpj cnpj;
    @Column(name = "rg", length = LENGTH_RG)
    private String rg;
    @Column(name = "inscricaoEstadual", length = LENGTH_INSCRICAO_ESTADUAL)
    private String inscricaoEstadual;
    @AttributeOverride(name = "valor", column =
    @Column(name = "email"))
    private Email email;
    @ElementCollection(fetch = FetchType.LAZY, targetClass = Telefone.class)
    @AttributeOverride(name = "valor", column =
    @Column(name = "telefone", length = 10))
    private List&lt;Telefone&gt; telefones;
    private boolean ativo = true;
    @ManyToMany
    private List&lt;Permissao&gt; permissoes;

    //getters and setters, equals e hashcode
}

desde já agradeço

2 Respostas

tebosoftware

Ninguêm passou por isso ainda?

tebosoftware

Depois de ralar um pouco, acabei descobrindo que a culpa não era do JPA e sim do h:selectBooleanCheckbox que não estava conseguindo converter o String para Enum. Então tiver que construir um conversor.

Criado 8 de março de 2012
Ultima resposta 9 de mar. de 2012
Respostas 2
Participantes 1