Listagens em JSF + Grid ! query did not return a unique result: 2

Pessoal quando eu mando pesquisar por nome obtenho o seguinte erro a baixo ! quando mando pesquisar por matrícula ele acha ! logo nomes podem ter duplicidade matricula não, como resolvo isso ?

abraço. jr.

******************************Erro

============================DAO==============================

  public Pessoa pesquisaPessoaByNome(String nome) {
        logger.info("pesquisaPessoaByNome : " + nome);
        Criteria c = session.createCriteria(Pessoa.class);
        c.add(Restrictions.ilike("nome", "%" + nome + "%"));
        c.addOrder(Order.desc("matricula")); // ordem descentente
        return (Pessoa) c.uniqueResult();
    }

pessoaFacade.java

package br.gov.nutec.facade;

import java.util.List;

import br.gov.nutec.modelo.Pessoa;

public interface PessoaFacade extends BaseFacade<Pessoa> {

    @Override
    public void salva(Pessoa p);
    @Override
    public void remove(Pessoa p);
    @Override
    public Pessoa procura(Long id);
    @Override
    public void atualiza(Pessoa p);
    public boolean autentica(String email, String senha);
    public List<Pessoa> pesquisaPessoasByNome(String nome);
    public List<Pessoa> pesquisaPessoasByMatricula(String matricula); //*pesquisa matricula
    public List<Pessoa> pesquisaPessoasByDigina(String digina);
}

PessoaFacadeImpl .java

package br.gov.nutec.facade;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import br.gov.nutec.dao.PessoaDAO;
import br.gov.nutec.modelo.Pessoa;
public class PessoaFacadeImpl implements PessoaFacade {
	private static final long serialVersionUID = 1818242808424001885L;
	private PessoaDAO pessoaDAO;
	private SessionFactory sf; 
	private	Session session;
	private Transaction tx;
        
    @Override
	public void salva(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.save(p);
		
		tx.commit();
		session.close();
	}
    @Override
	public void atualiza(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.merge(p);
		
		tx.commit();
		session.close();
	}
    @Override
	public Pessoa procura(Long id) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
				
		Pessoa p = this.pessoaDAO.load(id);
		
		tx.commit();
		session.close();
		
		return p;
	}
    @Override
	public void remove(Pessoa p) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		this.pessoaDAO.delete(p);
		
		tx.commit();
		session.close();
	}
    @Override
	public List<Pessoa> lista() {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
				
		List<Pessoa> lista = this.pessoaDAO.list();
		
		tx.commit();
		session.close();
		
		return lista;
	}
   
       
         @Override
	public boolean autentica(String email, String senha){
		boolean autenticado;

		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		autenticado = this.pessoaDAO.verificaEmailSenha(email, senha);

		tx.commit();
		session.close();

		return autenticado;
	}
        //*******************************PESQUISA MATRICULA NOME ****************************//
        @Override
	public List<Pessoa> pesquisaPessoasByNome(String nome) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		List<Pessoa> lista = this.pessoaDAO.pesquisaPessoas(nome);
		tx.commit();
		session.close();
		
		return lista;
	}
              @Override
	public List<Pessoa> pesquisaPessoasByDigina(String digina) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		List<Pessoa> lista = this.pessoaDAO.pesquisaPessoas(digina);
		tx.commit();
		session.close();

		return lista;
	}
    //** lista pessoa por matrícula
    
    @Override
    public List<Pessoa> pesquisaPessoasByMatricula(String matricula) {
       sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		List<Pessoa> lista = this.pessoaDAO.pesquisaPessoas(matricula);
		tx.commit();
		session.close();

		return lista;
    }

	public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		Pessoa p = this.pessoaDAO.pesquisaPessoaByNome(nome);
		
		tx.commit();
		session.close();
		
		return p; 
	}

    // setado por PessoaMB
      public Pessoa procuraByMatricula(String matricula) {
          sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		Pessoa p = this.pessoaDAO.pesquisaPessoaByMatricula(matricula);
		tx.commit();
		session.close();
		
		return p;
    }

     // setado por PessoaMB
      public Pessoa procuraByDigina(String digina) {
          sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		Pessoa p = this.pessoaDAO.pesquisaPessoaByMatricula(digina);
		tx.commit();
		session.close();

		return p;
    }
       public Pessoa procuraById(Long id){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		Pessoa p = this.pessoaDAO.pesquisaPessoaById(id);

		tx.commit();
		session.close();

		return p;
	}

	public Pessoa procuraByEmail(String email){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

		Pessoa p = this.pessoaDAO.pesquisaPessoaByEmail(email);

		tx.commit();
		session.close();

		return p;
	}
}

pessoaMB.java

public String pesquisaByNome(){
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.setPessoa(pessoaService.procuraByNome(this.getPessoa().getNome()));
		return "pesquisaByNomeSucesso";
	}
         
        public String pesquisaByDigina(){
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.setPessoa(pessoaService.procuraByDigina(this.getPessoa().getDigina()));
		return "pesquisaByDiginaSucesso";
	}
         public String pesquisaByMatricula(){ //seta procura by matricula
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.setPessoa(pessoaService.procuraByMatricula(this.getPessoa().getMatricula()));
		return "pesquisaByMatriculaSucesso";
	}
       
<h:panelGrid columns="1" id="inputs">
                                    
                                    <h:outputLabel for="nomeLabel" value="Digite o Nome: " />
                                    <h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}" style=" width : 250px;"  styleClass="inputPesquisa">
                                        <a4j:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByNome}" reRender="pessoas">
                                        </a4j:commandButton>
                                    </h:inputText>

                                    <h:outputLabel for="matriculaLabel" value="Digite a Matrícula: " />
                                    <h:inputText id="matriculaInput" value="#{pessoaMB.pessoa.matricula}" style=" width : 250px;"  styleClass="inputPesquisa">
                                        <a4j:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByMatricula}" reRender="pessoas">
                                        </a4j:commandButton>
                                    </h:inputText>
                                    
                                        <h:outputLabel for="diginaLabel" value="Digite a Digina: " />
                                        <h:inputText id="diginaInput" value="#{pessoaMB.pessoa.digina}" style=" width : 250px;"  styleClass="inputPesquisa">
                                            <a4j:commandButton value="Pesquisar" action="#{pessoaMB.pesquisaByDigina}" reRender="pessoas">
                                            </a4j:commandButton>
                                        </h:inputText>
                                </h:panelGrid>

grid

<rich:dataTable value="#{pessoaMB.pessoas}" var="pessoa" rows="30" id="pessoas" width="100%" cellspacing="0" cellpadding="0" border="1">
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="MATRÍCULA" />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.matricula}" />
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="NOME" />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.nome}" />
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="E-MAIL" />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.email}" />
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="CPF" />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.cpf}" />
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="DATA NASC." />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.data_nasc}">
                                        <f:convertDateTime pattern="dd/MM/yyyy" />
                                    </h:outputText>
                                </h:column>
                                <h:column>
                                    <f:facet name="header">
                                        <h:outputText value="CELULAR" />
                                    </f:facet>
                                    <h:outputText value="#{pessoa.celular}" />
                                </h:column>
                               
                                <f:facet name="footer">
                                    <rich:datascroller />
                                </f:facet>
                            </rich:dataTable>

Você não pode esperar um único resultado, sendo que ele pode se repetir! Pesquisa por nome, poderá trazer mais de um registro!

isso eu sei ! postei la em cima !

quero saber como mostrar isso na grid e da rerender !

Obrigado !

[quote=juniorsatanas]Pessoal quando eu mando pesquisar por nome obtenho o seguinte erro a baixo ! quando mando pesquisar por matrícula ele acha ! logo nomes podem ter duplicidade matricula não, como resolvo isso ?
[/quote]

Se sabe, porque perguntou?! Então não entendi a sua dúvida!! O que você quer fazer?!

Quando eu mando listar :

  @Override
	public List<Pessoa> pesquisaPessoasByNome(String nome) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		List<Pessoa> lista = this.pessoaDAO.pesquisaPessoas(nome);
		tx.commit();
		session.close();
		
		return lista;
	}
public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		Pessoa p = this.pessoaDAO.pesquisaPessoaByNome(nome);
		
		tx.commit();
		session.close();
		
		return p; 
	}
public String pesquisaByNome(){
		PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
		this.setPessoa(pessoaService.procuraByNome(this.getPessoa().getNome()));
		return "pesquisaByNomeSucesso";
	}

============================DAO==============================

  public Pessoa pesquisaPessoaByNome(String nome) {
        logger.info("pesquisaPessoaByNome : " + nome);
        Criteria c = session.createCriteria(Pessoa.class);
        c.add(Restrictions.ilike("nome", "%" + nome + "%"));
        c.addOrder(Order.desc("matricula")); // ordem descentente
        return (Pessoa) c.uniqueResult();
    }

quero por o resultado disso em uma Grid !

   1. <rich:dataTable value="#{pessoaMB.pessoas}" var="pessoa" rows="30" id="pessoas" width="100%" cellspacing="0" cellpadding="0" border="1">  
   2.                                 <h:column>  
   3.                                     <f:facet name="header">  
   4.                                         <h:outputText value="MATRÍCULA" />  
   5.                                     </f:facet>  
   6.                                     <h:outputText value="#{pessoa.matricula}" />  
   7.                                 </h:column>  
   8.                                 <h:column>  
   9.                                     <f:facet name="header">  
  10.                                         <h:outputText value="NOME" />  
  11.                                     </f:facet>  
  12.                                     <h:outputText value="#{pessoa.nome}" />  
  13.                                 </h:column>  
  14.                                 <h:column>  
  15.                                     <f:facet name="header">  
  16.                                         <h:outputText value="E-MAIL" />  
  17.                                     </f:facet>  
  18.                                     <h:outputText value="#{pessoa.email}" />  
  19.                                 </h:column>  
  20.                                 <h:column>  
  21.                                     <f:facet name="header">  
  22.                                         <h:outputText value="CPF" />  
  23.                                     </f:facet>  
  24.                                     <h:outputText value="#{pessoa.cpf}" />  
  25.                                 </h:column>  
  26.                                 <h:column>  
  27.                                     <f:facet name="header">  
  28.                                         <h:outputText value="DATA NASC." />  
  29.                                     </f:facet>  
  30.                                     <h:outputText value="#{pessoa.data_nasc}">  
  31.                                         <f:convertDateTime pattern="dd/MM/yyyy" />  
  32.                                     </h:outputText>  
  33.                                 </h:column>  
  34.                                 <h:column>  
  35.                                     <f:facet name="header">  
  36.                                         <h:outputText value="CELULAR" />  
  37.                                     </f:facet>  
  38.                                     <h:outputText value="#{pessoa.celular}" />  
  39.                                 </h:column>  
  40.                                  
  41.                                 <f:facet name="footer">  
  42.                                     <rich:datascroller />  
  43.                                 </f:facet>  
  44.                             </rich:dataTable>  

thiago.correa intendeu ?

Porra era para ter usado DAO ao invés dessa bosta de Facade !

Agora sim tu foi mais claro!
O que você quer fazer não tem mistério, no teu dataTable você colocou disse que o atributo “pessoas” do teu MBean pessoaMB é quem deve ser percorrido, então faltou você associar a tua consulta a esse atributo

List<Pessoa> pessoas;

public String pesquisaByNome(){   
        PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();   
        pessoas = pessoaService.procuraByNome(this.getPessoa().getNome());   
        return "pesquisaByNomeSucesso";   
    } 

public List<Pessoa> getPessoas() {
    return pessoas;
}

Tiago muito obrigado mano ! vou testar aqui…

Vaelu mesmo !

fala que tem que criar um get pessoa…

    * */
          List&lt;Pessoa&gt; pessoas;
          public String pesquisaPessoasByNome(){
          PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
          pessoas = (List&lt;Pessoa&gt;) pessoaService.procuraByNome(this.getPessoa().getNome());
          return "pesquisaByNomeSucesso";
          }
             public List&lt;Pessoa&gt; getPessoas() {
             return pessoas;
 }

ficou assim :


package br.gov.nutec.facade;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import br.gov.nutec.dao.PessoaDAO;
import br.gov.nutec.modelo.Pessoa;

public class PessoaFacadeImpl implements PessoaFacade {
	private static long serialVersionUID = 1L;

    /**
     * @return the serialVersionUID
     */
    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    /**
     * @param aSerialVersionUID the serialVersionUID to set
     */
    public static void setSerialVersionUID(long aSerialVersionUID) {
        serialVersionUID = aSerialVersionUID;
    }
	private PessoaDAO pessoaDAO;
	private SessionFactory sf; 
	private	Session session;
	private Transaction tx;
        
    @Override
	public void salva(Pessoa p) {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
		
		this.getPessoaDAO().save(p);
		
		getTx().commit();
		getSession().close();
	}
    @Override
	public void atualiza(Pessoa p) {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
		
		this.getPessoaDAO().merge(p);
		
		getTx().commit();
		getSession().close();
	}
    @Override
	public Pessoa procura(Long id) {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
				
		Pessoa p = this.getPessoaDAO().load(id);
		
		getTx().commit();
		getSession().close();
		
		return p;
	}
    @Override
	public void remove(Pessoa p) {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
		
		this.getPessoaDAO().delete(p);
		
		getTx().commit();
		getSession().close();
	}
    @Override
	public List&lt;Pessoa&gt; lista() {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
				
		List&lt;Pessoa&gt; lista = this.getPessoaDAO().list();
		
		getTx().commit();
		getSession().close();
		
		return lista;
	}
   
       
         @Override
	public boolean autentica(String email, String senha){
		boolean autenticado;

		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		autenticado = this.getPessoaDAO().verificaEmailSenha(email, senha);

		getTx().commit();
		getSession().close();

		return autenticado;
	}
        //*******************************PESQUISA MATRICULA NOME ****************************//
        
        @Override
	public List&lt;Pessoa&gt; pesquisaPessoasByNome(String nome) {
		sf = new AnnotationConfiguration().configure().buildSessionFactory(); 
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);
		
		List&lt;Pessoa&gt; lista = this.pessoaDAO.pesquisaPessoas(nome);
		tx.commit();
		session.close();
		
		return lista;
	}
          
          private List&lt;Pessoa&gt; pessoas;
          public String pesquisaPessoasByNome(){
          PessoaFacadeImpl pessoaService = new PessoaFacadeImpl();
          pessoas = pessoaService.procuraByNome(this.getPessoa().getNome());
          return "pesquisaByNomeSucesso";
          }
             public List&lt;Pessoa&gt; getPessoas() {
             return pessoas;
 }
         
              @Override
	public List&lt;Pessoa&gt; pesquisaPessoasByDigina(String digina) {
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		List&lt;Pessoa&gt; lista = this.getPessoaDAO().pesquisaPessoas(digina);
		getTx().commit();
		getSession().close();

		return lista;
	}
    //** lista pessoa por matrícula
    
    @Override
    public List&lt;Pessoa&gt; pesquisaPessoasByMatricula(String matricula) {
        setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		List&lt;Pessoa&gt; lista = this.getPessoaDAO().pesquisaPessoas(matricula);
		getTx().commit();
		getSession().close();

		return lista;
    }

	public Pessoa procuraByNome(String nome){
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));
		
		Pessoa p = this.getPessoaDAO().pesquisaPessoaByNome(nome);
		
		getTx().commit();
		getSession().close();
		
		return p; 
	}

    // setado por PessoaMB
      public Pessoa procuraByMatricula(String matricula) {
          setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		Pessoa p = this.getPessoaDAO().pesquisaPessoaByMatricula(matricula);
		getTx().commit();
		getSession().close();
		
		return p;
    }

     // setado por PessoaMB
      public Pessoa procuraByDigina(String digina) {
          setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		Pessoa p = this.getPessoaDAO().pesquisaPessoaByMatricula(digina);
		getTx().commit();
		getSession().close();

		return p;
    }
       public Pessoa procuraById(Long id){
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		Pessoa p = this.getPessoaDAO().pesquisaPessoaById(id);

		getTx().commit();
		getSession().close();

		return p;
	}

	public Pessoa procuraByEmail(String email){
		setSf(new AnnotationConfiguration().configure().buildSessionFactory());
		setSession(getSf().openSession());
		setTx(getSession().beginTransaction());
		setPessoaDAO(new PessoaDAO(getSession(), Pessoa.class));

		Pessoa p = this.getPessoaDAO().pesquisaPessoaByEmail(email);

		getTx().commit();
		getSession().close();

		return p;
	}

    /**
     * @return the pessoaDAO
     */
    public PessoaDAO getPessoaDAO() {
        return pessoaDAO;
    }

    /**
     * @param pessoaDAO the pessoaDAO to set
     */
    public void setPessoaDAO(PessoaDAO pessoaDAO) {
        this.pessoaDAO = pessoaDAO;
    }

    /**
     * @return the sf
     */
    public SessionFactory getSf() {
        return sf;
    }

    /**
     * @param sf the sf to set
     */
    public void setSf(SessionFactory sf) {
        this.sf = sf;
    }

    /**
     * @return the session
     */
    public Session getSession() {
        return session;
    }

    /**
     * @param session the session to set
     */
    public void setSession(Session session) {
        this.session = session;
    }

    /**
     * @return the tx
     */
    public Transaction getTx() {
        return tx;
    }

    /**
     * @param tx the tx to set
     */
    public void setTx(Transaction tx) {
        this.tx = tx;
    }

    /**
     * @param pessoas the pessoas to set
     */
    public void setPessoas(List&lt;Pessoa&gt; pessoas) {
        this.pessoas = pessoas;
    }

    private Object getPessoa() {
              return pessoas;
    }

  
  
}

Pior que a critéria ta certo ! tanto com list quanto com uniqueResult da o mesmo erro !

 public Pessoa pesquisaPessoaByNome(String nome) {
        logger.info("pesquisaPessoaByNome : " + nome);
        Criteria c = session.createCriteria(Pessoa.class);
        c.add(Restrictions.ilike("nome", "%" + nome + "%"));
        c.addOrder(Order.desc("matricula")); // ordem descentente
        //return (Pessoa) c.uniqueResult();
        return (Pessoa) c.list();
    }

Olha o cast que você está dando com o list!!!

que cast ?

:shock:
Esse:

return (Pessoa) c.list(); 

onde o certo seria

public List&lt;Pessoa&gt; pesquisaPessoaByNome(String nome) {
    //.....
    return (List&lt;Pessoa&gt;) c.list(); 
}

mudei o procura e seguir as suas sugestões ! AGORA vou rodar !

	public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

                List&lt;Pessoa&gt; p = this.pessoaDAO.pesquisaPessoaByNome(nome);

		tx.commit();
		session.close();

		return (Pessoa) p;
	}
CAST
DE 

/*
    public Pessoa pesquisaPessoaByNome(String nome) {
        logger.info("pesquisaPessoaByNome : " + nome);
        Criteria c = session.createCriteria(Pessoa.class);
        c.add(Restrictions.ilike("nome", "%" + nome + "%"));
        c.addOrder(Order.desc("matricula")); // ordem descentente
        //return (Pessoa) c.uniqueResult();
        return (Pessoa) c.list();

    }

PARA
*/
     public List&lt;Pessoa&gt; pesquisaPessoaByNome(String nome) {
        getLogger().info("pesquisaPessoaByNome : " + nome);
        Criteria c = session.createCriteria(Pessoa.class);
        c.add(Restrictions.ilike("nome", "%" + nome + "%"));
        c.addOrder(Order.desc("matricula")); // ordem descentente
        return (List&lt;Pessoa&gt;) c.list();
    }
DE
/*
	public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);

Pessoa p = this.pessoaDAO.pesquisaPessoaByNome(nome);


		tx.commit();
		session.close();

		return (Pessoa) p;
	}
*/
PARA

	public Pessoa procuraByNome(String nome){
		sf = new AnnotationConfiguration().configure().buildSessionFactory();
		session = sf.openSession();
		tx = session.beginTransaction();
		pessoaDAO = new PessoaDAO(session, Pessoa.class);


                List&lt;Pessoa&gt; p = this.pessoaDAO.pesquisaPessoaByNome(nome);

		tx.commit();
		session.close();

		return (Pessoa) p;
	}

RESOLVIR ASSIM: NO xhtml !





                &lt;rich:tab label="Mensalidade"&gt;

                    &lt;!-- INICIA FORMULARIO--&gt;
                    &lt;a4j:form&gt;
                        &lt;h:panelGrid columns="1" id="inputs"&gt;

                            &lt;h:outputLabel for="matricula" value="Digite a Matrícula: " /&gt;
                            &lt;h:inputText id="matriuclaInput" value="#{pessoaMB.pessoa.matricula}"  styleClass="inputPesquisa" &gt;
                                &lt;a4j:commandButton  value="Pesquisar" action="#{pessoaMB.pesquisaByMatricula}" reRender="inputs,fisicas,pessoas"&gt;
                                &lt;/a4j:commandButton&gt;
                            &lt;/h:inputText&gt;
                            &lt;h:outputLabel for="nome" value="Digite o Nome: " /&gt;
                            &lt;h:inputText id="nomeInput" value="#{pessoaMB.pessoa.nome}"  styleClass="inputPesquisa" &gt;
                                &lt;a4j:commandButton  value="Pesquisar" action="#{pessoaMB.pesquisaByNome}" reRender="inputs,fisicas,pessoas"&gt;
                                &lt;/a4j:commandButton&gt;
                            &lt;/h:inputText&gt;
                            &lt;h:outputLabel for="matricula" value="Digite a Matrícula ENCONTRADA: " /&gt;
                            &lt;h:inputText id="mat" value="#{mensalidadeMB.mensalidade.mat}" styleClass="edit" size="30"&gt;
                            &lt;/h:inputText&gt;

                            &lt;h:outputLabel for="Data Pagamento.:" value="Data Pagamento.: "  /&gt;
                            &lt;rich:calendar id="data_pag" value="#{mensalidadeMB.mensalidade.data_pag}"&gt;
                                &lt;a4j:support event="ondateselected" /&gt;
                            &lt;/rich:calendar&gt;

                            &lt;h:outputLabel for="valor" value="Valor.: ($)"/&gt;
                            &lt;h:inputText id="valor" value="#{mensalidadeMB.mensalidade.valor}" styleClass="edit" size="30"&gt;
                            &lt;/h:inputText&gt;
                           
                        &lt;/h:panelGrid&gt;
                        |&lt;a4j:commandButton value="Inserir" action="#{mensalidadeMB.save}" status="sts" reRender="inputs,mensalidades" styleClass="botoes"/&gt;

                        |&lt;a4j:commandButton value="Voltar" immediate="true" action="toIndex" styleClass="botoes"/&gt;|
                    
                    
                        &lt;f:subview id="listaumensalidade"&gt;
                            &lt;rich:dataTable value="#{mensalidadeMB.mensalidades}" var="mensalidade" rows="12" id="mensalidades" width="100%" cellspacing="0" cellpadding="0" border="5"&gt;
                                &lt;h:column&gt;
                                    &lt;f:facet name="header"&gt;
                                        &lt;h:outputText value="PARCELAS" /&gt;
                                    &lt;/f:facet&gt;
                                    &lt;h:outputText value="#{mensalidade.id}" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;f:facet name="header"&gt;
                                        &lt;h:outputText value="MATRICULA PESSOA" /&gt;
                                    &lt;/f:facet&gt;
                                    &lt;h:outputText value="#{mensalidade.mat}" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;f:facet name="header"&gt;
                                        &lt;h:outputText value="DATA/PAGAMENTO" /&gt;
                                    &lt;/f:facet&gt;
                                    &lt;h:outputText value="#{mensalidade.data_pag}" /&gt;
                                &lt;/h:column&gt;
                                &lt;h:column&gt;
                                    &lt;f:facet name="header"&gt;
                                        &lt;h:outputText value="VALOR" /&gt;
                                    &lt;/f:facet&gt;
                                    &lt;h:outputText value="#{mensalidade.valor}" /&gt;

                                &lt;/h:column&gt;

                                &lt;f:facet name="footer"&gt;
                                    &lt;rich:datascroller /&gt;
                                &lt;/f:facet&gt;
                            &lt;/rich:dataTable&gt;
                        &lt;/f:subview&gt;
                    &lt;/a4j:form&gt;
                &lt;/rich:tab&gt;