Problema com validação com FacesMessage. [Resolvido]

Boa noite, pessoal, estou com um problema de validação.
Gostaria que quando o usuário inserisse um "número de decreto" que já existisse no banco, houvesse uma mensagem dizeando que já existia, bom tentei fazer deste modo e não deu certo.

estou obtendo a excessão java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.prova.decreto.Decreto

Este é o DAO.

	public Decreto buscaPorDecreto(BigInteger numero) {
		String hql = "select d from Decreto d where d.numero = :numero";
		Query consulta = this.session.createQuery(hql);
		consulta.setBigInteger("numero", numero);
		System.out.println(hql);
		System.out.println(numero);
		return (Decreto) consulta.list();

	}

[code]
Este é o DecretoRN - onde trato as regras.

public boolean verificarDecreto(BigInteger numero) {
if (this.decretoDAO.buscaPorDecreto(numero) == null) {
return true;
}
return false;
}[/code]

Este é o DecretoBean
public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		if (isDecretoCadastrado(decreto)) {
			System.out.println(decreto);
			 FacesMessage facesMessage = new FacesMessage(
			 "Digite um número de decreto diferente.");
			 context.addMessage(null, facesMessage);
			 return null;
		}
		 DecretoRN decretoRN = new DecretoRN();
		 decretoRN.salvar(this.decreto);
		return FOWARD_SUCESSO;

	}

	public boolean isDecretoCadastrado(Decreto decreto) {
		return decretoRN.verificarDecreto(decreto.getNumero());
	}

[code]

A página

<?xml version=“1.0” encoding=“ISO-8859-1”?>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”
http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:ui=“http://java.sun.com/jsf/facelets"
xmlns:h=“http://java.sun.com/jsf/html"
xmlns:f=“http://java.sun.com/jsf/core"
xmlns:a4j=“http://richfaces.org/a4j"
xmlns:rich=“http://richfaces.org/rich”>
<ui:composition template=“template/template.xhtml”>
<ui:define name=“content”>
<rich:panel header=“Usuarios”>
<h:form id=“usuarioForm”>
<h:messages layout=“list” style=“color:red; font-weight:bold;” />
<h:inputHidden value=”#{decretoBean.decreto.id}” />
<h:inputHidden value=”#{decretoBean.decreto.ativo}” />

			&lt;h:panelGrid columns="2"&gt;
				&lt;h:outputLabel for="decreto" value="Número do Decreto" /&gt;
				&lt;h:inputText id="decreto" value="#{decretoBean.decreto.numero}"
					size="30" required="true"
					requiredMessage="O campo número do decreto não foi preenchido."
					validatorMessage="Digite o número do decreto com no mínimo de 3 caracteres, máximo de 30."&gt;
					&lt;f:validateLength minimum="3" maximum="11"&gt;&lt;/f:validateLength&gt;
				&lt;/h:inputText&gt;


				&lt;h:outputLabel value="Data do Decreto" for="data" /&gt;
				&lt;h:inputText value="#{decretoBean.decreto.data}" id="data"
					size="10" maxlength="10" required="true"
					requiredMessage="O campo data não foi preenchido."
					validatorMessage="A data deve conter até dez algarismos."&gt;
					&lt;f:convertDateTime dateStyle="medium" /&gt;
				&lt;/h:inputText&gt;

				&lt;h:outputText value="Descrição" for="descricao" /&gt;
				&lt;h:inputTextarea id="descricao" label="descricao"
					value="#{decretoBean.decreto.descricao}" cols="40" rows="5"
					maxlength="200" required="true"
					requiredMessage="O campo Descrição deve ser preenchido."
					validatorMessage="A Descrição deve ter no mínimo 5 e no máximo 200 caracteres e só deve ter os símbolos '.' e '_'."&gt;
				&lt;/h:inputTextarea&gt;

				&lt;h:commandButton action="lista" value="volta" immediate="true" /&gt;
				
				&lt;h:commandButton id="btnSalvar" action="#{decretoBean.salvar}"
					value="salvar" execute="@form"&gt;
				&lt;/h:commandButton&gt;
			&lt;/h:panelGrid&gt;
		&lt;/h:form&gt;
	&lt;/rich:panel&gt;
&lt;/ui:define&gt;

</ui:composition>
</html>[/code]

Pela Exception, parece que tua consulta sql esta retornando mais de um registro.
Assim ele não consegue converter para um decreto no retorno de seu método buscaPorDecreto!
Para resolver tu poderia limitar sua consulta com limit 1 por exemplo.

O DAO deve ser:

 public Decreto buscaPorDecreto(BigInteger numero) {  
        String hql = "select d from Decreto d where d.numero = :numero";  
        Query consulta = this.session.createQuery(hql);  
        consulta.setBigInteger("numero", numero);  
        System.out.println(hql);  
        System.out.println(numero);  
        return (Decreto) consulta.list().get(0);  // ou consulta.uniqueResult();
    }  

O consulta.list retorna uma lista com todos os decretos com esse numero. Se você deseja apenas um objeto, então a solução é esta(lembre-se de declarar o numero do decreto como único).

Se quiser uma lista, altere o retorno do método para List
e use:

List<Decreto> lista = consulta.list(); return lista;

Realmente vi este problema com o UniqueResult, por isso troquei, funcionou.

Testei um método com um boolean, e resolveu, muito obrigado.