[RESOLVIDO] Consulta com criteria utizando propriedade de um enum

Olá pessoal, estou com problemas em uma consulta onde o usuario informa uma string qualquer e a consulta deve verificar a presença dessa string dentro de uma propriedade de um enum.

um trecho da minha classe enum:

EMAIL_USUARIO(1,"EMAIL_USUARIO", "Email do usuário"), 
EMAIL_SENHA(2,"EMAIL_SENHA", "Senha do email do usuário"), 
EMAIL_SMTP(3,"EMAIL_SMTP", "Endereço SMTP de email"),
...;

minha consulta:

//criteria criada para a minha classe persistente
Criteria criteria = ((Session)entityManager.getDelegate()).createCriteria(ParametroSistema.class);

//consulta por um enum passado como parametro, neste caso funciona perfeito
if(this.parametroGrupo != null){
   criteria.add(Restrictions.eq("parametroGrupo", this.parametroGrupo));
}

//pesquisa em uma outra propriedade da classe, que tb é um enum, mas por um trecho da descrição desse enum
if(this.nomeParametro != null && !this.nomeParametro.isEmpty()){
   criteria.add(Restrictions.ilike("parametroNome.descricao", this.nomeParametro));
}

this.listParametros = criteria.list();

Na consulta acima caso o usuário informe email deveria retornar as enumerações exibidas como exemplo no inicio do post, mas é disparado o seguinte erro após o criteria.list():

Qualquer ajuda é bem vinda!

[]'s

Thiago…

normalmente o é o código do ENUM que é salvo no banco de dados, a menos que você especifique o contrário, que no caso é salvar outra propriedade do ENUM.
Você tem que ver o que ta salvando no banco de dados, se é o código do ENUM ou a string de descrição, ou algo do tipo.

Olá Mathias, obrigado pela respota, o enum é composto por um identificador (inteiro) , nome(uma constante), e descricao(uma string). Neste caso o que é guardado no bd é o identificador ou seja um inteiro, pelo que percebi mesmo criando ou não alias para a propriedade ele tenta fazer um join e não consegue.

O que eu queria é algo como pegar um getDescricao e usar o ilike nele… Vou continuar pesquisando!

Grato!

[]'s

Thiago, tem como você substituir o comportamento padrão de salvar o ordinal do enum no banco, basta adicionar

@Enumerated(EnumType.STRING)

no mapeamento da propriedade do tipo enum que será persistida. Nesse caso ele passará a salvar a representação String do enum.

Legal essa possibilidade, mas o problema é que trabalho com base legada e não posso fazer alterações no esquema do bd.
Sera que não existe uma outra possibilidade sem alterar o esquema do bd?

Mas como o enum ñ possui muitas posições resolvi temporariamente de uma maneira ñ muito elegante (contains em cada posição da lista devolvida apos aplicar os outros filtros).

[]'s

Outra possibilidade é criar uma lista com os enums que se encaixam nesse filtro, e na busca no bd você usa

Restrictions.in(propertyName, values);

isso faz com que o bd procure pelos códigos da lista de enums que você pré-filtrou.