Erro java.lang.String cannot be cast to java.lang.Enum na execução de Query

Pessoal.
Proceguindo em meu aprendizado, estou tentando fazer combos aninhados (Estado/Cidade), contudo ao executar o metodo de buscar as cidades tenho problemas de cast com o enum na execucao da criteria no hibernate.

Este é o erro.

Hibernate: 
    /* criteria query */ select
        this_.idcidade as idcidade1_0_,
        this_.codestado as codestado1_0_,
        this_.txcidade as txcidade1_0_ 
    from
        cidade this_ 
    where
        this_.codestado=?
11/10/2010 16:36:28 com.sun.faces.application.ActionListenerImpl processAction
GRAVE: /usuario.xhtml @36,124 action="#{usuarioAction.PreencherCidade}": java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Enum

Este e a bean

@Id
 	@GeneratedValue
 	@Column(name="idcidade") 
	private Integer sequencialCidade;
	@Column(name="txcidade") 	 
	private String nomeCidade;
    @Enumerated(EnumType.ORDINAL) //Já Tentei .STRING e o erro e o mesmo
	@Column(name="codestado")     

Este é o enum

public enum Estado {
	SP,RJ,PR,DF,ES,MG,SC,MT;
}

Este é a criteria

Criteria cid = teste.createCriteria(Cidade.class);
		if(cidade.getNomeCidade() != null)
			cid.add(Restrictions.eq("nomeCidade",cidade.getNomeCidade()));
		if(cidade.getEstado().toString() != null)
			cid.add(Restrictions.eq("estado",cidade.getEstado().toString()));
		
		//Executando HQL
        List<Cidade> resultado = cid.list();
        //Pegando Resultado
        if (resultado != null) {
            return resultado;
        } else {
            return null;
        }

Agradeço muito qualquer dica, pois já vi varios exemplos e tentei muitas alternativas mas não tive sucesso.

O que vc vai salvar no banco é string ou int?

o tipo da anotação tem que ser o tipo da coluna do banco

Esse erro deve ser pq vc tem um enum e está passndo uma string pra tentar restringir a sua busca

Passa o valor do enum que você quer

Por exemplo Estados.SP ao invés de passar “SP”

Amigão já estou fazendo isso. No banco é string, tentei passar string e num funfo, mudei como que apelando.

A pagina.

<dl>
    <dt><h:outputText value="Estado:" /></dt>
    <dd>
    	<h:selectOneMenu id="estado" value="#{usuarioAction.estadoEscolha}"> 
			<f:selectItems value="#{usuarioAction.estado}" noSelectionLabel="Selecione..."/>
			<a4j:support event="onchange" ajaxSingle="true" action="#{usuarioAction.PreencherCidade}" reRender="estado,cidade"/> 
		</h:selectOneMenu>
    </dd>
	<dt><h:outputText value="Cidade:"/></dt>
    <dd>
    	<h:selectOneMenu id="cidade" value="#{usuarioAction.usuario.cidade}"> 
			<s:selectItems value="#{usuarioAction.cidades}" noSelectionLabel="Selecione..."/> 
			<s:convertEntity /> 
		</h:selectOneMenu>
	</dd>	
</dl>

A chamada do metodo

if (cidades == null)
	cidades = new ArrayList<br.romulor2.bel.Cidade>();

br.romulor2.bel.Cidade cidadePesquisa = new br.romulor2.bel.Cidade();

Estado estadoPesquisa = null;
cidadePesquisa.setEstado(estadoPesquisa.valueOf(estadoEscolha));
cidades = cidadeDAO.pesquisar(cidadePesquisa);

return "SUCCESS";

Se o campo é um enum, vc tem que passar o enum e não a string que representa ele