Não entendo este erro do enum

Estou com esta exceção no enum

Parameter value [I] did not match expected type [org.desif.enuns.ModuloEntregaDeclaracaoEnum (n/a)]

Estou entendendo que ele disse que o parametro I não existe no Enum ModuloEntregaDeclaracaoEnum

Mas minha classe enum e o I está la… Olhei no banco de dados e só existe o valor I no campo que referencia este enum.

package org.desif.enuns;

public enum ModuloEntregaDeclaracaoEnum {

	D("Demonstrativo Contábil"), A("Apuração Mensal do ISSQN"), I("Informações Comuns aos Municípios");

	private String descricao;

	private ModuloEntregaDeclaracaoEnum(String descricao) {
		this.descricao = descricao;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Override
	public String toString() {
		return descricao;
	}

}

O que está de errado ?

Talvez seja a forma como está sendo recuperado esse valor. Você está usando algum ORM?

Outra coisa é que talvez não seja realmente um I (letra i) cadastrada no banco, mas sim um l (letra L). Pouco provável, mas vai que… :slight_smile:

@Lucas_Camara, analisei e não tem a letra (i,I) ou (l, L) no banco de dados.

Faz um distinct na coluna que representa essa enum.

E como está o mapeamento desse Enum?

Está mapeado assim:

@Column(name = "idf_declaracao")
@Enumerated(EnumType.STRING)
public ModuloEntregaDeclaracaoEnum getDeclaracao() {
	return declaracao;
}

public void setDeclaracao(ModuloEntregaDeclaracaoEnum declaracao) {
	this.declaracao = declaracao;
}

Vou fazer o distinct.

Será que é porque existem campos nulos ?

É isso que quero entender, quais os valores estão na tabela.

Nulo não seria um problema.

OK

O mapeamento também está ok.

Só uma dúvida: o trabalho que se tem para criar um enum assim, como o que fez e o de criar um assim

public enum ModuloEntregaDeclaracaoEnum {

DEMONSTRATIVO_CONTABIL("Demonstrativo Contábil"), 
APURACAO_MENSAL_ISSQN("Apuração Mensal do ISSQN"),
INFORMACOES_COMUNS_MUNICIPIOS("Informações Comuns aos Municípios"),
NENHUM("");//Ou NENHUM(null)

É o mesmo, não?
E, no banco de dados, ficaria um desses valores:
DEMONSTRATIVO_CONTABIL
APURACAO_MENSAL_ISSQN
INFORMACOES_COMUNS_MUNICIPIOS
NENHUM

Fiz as alterações e até achei melhor, mas o erro continua

Caused by: java.lang.IllegalArgumentException: Parameter value [INFORMACOES_COMUNS_MUNICIPIOS] did not match expected type [org.desif.enuns.ModuloEntregaDeclaracaoEnum (n/a)]
	at org.hibernate.jpa.spi.BaseQueryImpl.validateBinding(BaseQueryImpl.java:885)
	at org.hibernate.jpa.internal.QueryImpl.access$000(QueryImpl.java:80)
	at org.hibernate.jpa.internal.QueryImpl$ParameterRegistrationImpl.bindValue(QueryImpl.java:248)
	at org.hibernate.jpa.spi.BaseQueryImpl.setParameter(BaseQueryImpl.java:631)
	at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:180)
	at org.hibernate.jpa.spi.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:49)
	at org.desif.repository.importacao.IdentificacaoRepository.entidadesUsuariosLogadoEmpresaEntidade(IdentificacaoRepository.java:45)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82)
	at org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.WeavedInterceptor.processInvocation(WeavedInterceptor.java:53)
	at org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:407)
	at org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:46)
	at org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
	at org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:53)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.component.interceptors.NonPooledEJBComponentInstanceAssociatingInterceptor.processInvocation(NonPooledEJBComponentInstanceAssociatingInterceptor.java:59)
	at org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:309)
	at org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:273)
	... 87 more

Novo enum

package org.desif.enuns;

public enum ModuloEntregaDeclaracaoEnum {

	DEMONSTRATIVO_CONTABIL("Demonstrativo Contábil"), APURACAO_MENSAL_ISSQN(
			"Apuração Mensal do ISSQN"), INFORMACOES_COMUNS_MUNICIPIOS("Informações Comuns aos Municípios"), NENHUM("");

	private String descricao;

	private ModuloEntregaDeclaracaoEnum(String descricao) {
		this.descricao = descricao;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}

	@Override
	public String toString() {
		return descricao;
	}
}

Quando esse erro ocorre?

Nesta consulta

StringBuilder hqlSelectEntidade = new StringBuilder("new IdentificacaoEntity(i.id, i.cnpj, i.nome, i.mesAnoInicio, ");
hqlSelectEntidade.append("\n i.mesAnoFim, i.tipo, i.dataHora, i.protocolo, i.status) ");
hqlSelectEntidade.append("\n FROM IdentificacaoEntity i ");
hqlSelectEntidade.append("\n WHERE i.status NOT IN ('" + StatusIdentificacaoEnum.N.name() + "', '"+ StatusIdentificacaoEnum.D.name() + "') ");
hqlSelectEntidade.append("\n AND i.declaracao = :declaracao");
final String queryEntidade = "SELECT " + hqlSelectEntidade;
Query querySelectEntidade = em.createQuery(queryEntidade);
querySelectEntidade.setParameter("declaracao", declaracao.name());
Set<IdentificacaoEntity> resultSetEntidade = new HashSet(querySelectEntidade.getResultList());
return new ArrayList(resultSetEntidade);

O teu atributo é enum, não vai funcionar com uma string no NOT IN

Alterei toda a consulta e funcionou

StringBuilder hqlSelectEntidade = new StringBuilder(
                "new IdentificacaoEntity(i.id, i.cnpj, i.nome, i.mesAnoInicio, ");
        hqlSelectEntidade.append("\n i.mesAnoFim, i.tipo, i.dataHora, i.protocolo, i.status) ");
        hqlSelectEntidade.append("\n FROM IdentificacaoEntity i ");
        hqlSelectEntidade.append("\n WHERE i.status <> :naoProcessada ");
        hqlSelectEntidade.append("\n AND i.status <> :desativada ");
        hqlSelectEntidade.append("\n AND i.declaracao = :declaracao ");
        final String queryEntidade = "SELECT " + hqlSelectEntidade;
        Query querySelectEntidade = em.createQuery(queryEntidade);
        querySelectEntidade.setParameter("declaracao", declaracao);
        querySelectEntidade.setParameter("naoProcessada", StatusIdentificacaoEnum.NAO_PROCESSADA);
        querySelectEntidade.setParameter("desativada", StatusIdentificacaoEnum.DESATIVADA);