Problemas com o findByExample do Hibernate

3 respostas
L

Boa tarde Galera…
To com um probleminha… andei estudando o Hibernate, e nos tutoriais que eu li existia um método findByExample, onde eu supostamente passaria um Obejto como parâmetro e ele faria uma consulta no meu BD em cima dos campos preenchidos do Obejto…

No meu código então eu passaria um entidade e um string falando o tipo desta entidade…

O meu objeto entidade é do tipo
Pessoa, e contem os seguintes atributos:

-int idade
-int CPF

  • Nacionalidade nacionalidade
  • Idioma idioma

Onde nas minha classes Nacionalidade e Idioma… eu tenho outros atributos, como “int id”…

O que eu faço é criar um Objeto Pessoa, Nacionalidade e Idioma e depois defino o campo id de Nacionalidade com 1, o campo id de Idioma com 1 e seto esses dois objetos no meu objeto Pessoa e mando para o meu findByExample… So que ele não faz a busca com as opções definidas dentro do Objeto, mas se eu definir a “idade” e o “CPF”… ele faz a busca certinha!..

Alguém sabe me dizer pq ele não faz a consulta utilizando essas informações como parâmetro???

public List findByExample(Entidade entidade, String tabela) {
		try {
			abreSessao();
			List results = session.createCriteria(entidade.getClass(),tabela ).add(Example.create(entidade)).list();
			fechaSessao();
			return results;
		} catch (RuntimeException re) {
			System.out.println(re.toString());
			throw re;
		}
	}

Onde tenho

private HibernateUtil  h;

    private SessionFactory factory;

    private Transaction    tx;

    private Session        session;

    public void abreSessao() {

        factory = h.getSessionFactory();
        session = factory.openSession();
        tx = session.beginTransaction();

    }

    public void fechaSessao() {

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

    }

E a classe HibernateUtil:

package br.com.brt.correspondencia.dao.hibernate;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtil {

    private static final SessionFactory sessionFactory;

    static {
        try {
            sessionFactory = new Configuration().configure( "/br/com/brt/correspondencia/dao/hibernate/hibernate.cfg.xml" ).buildSessionFactory();
        } catch (Throwable ex) {
            System.err.println("Falha no SessionFactory" + ex);
            throw new ExceptionInInitializerError(ex);
        }
    }


    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}

3 Respostas

M

Opa,

Até onde eu conheço o Example do hibernate não trabalha com chaves estrangeiras.

:okok:

L

Existiria então alguma outra forma de resolver isso?!
será que eu vou ter que criar uma consulta “dentro” de outra consulta?!

Alguma sugestão?

M

Olá,

Eu sugiro que crie um método automatizado para isto que verifique estes casos. Utilize o bean BeanInfo.

:okok:

Criado 25 de junho de 2007
Ultima resposta 27 de jun. de 2007
Respostas 3
Participantes 2