Pesquisa Hibernate

5 respostas
EHS

Tenho um bd com essas duas tabelas, ensaio e fotoensaio e estou querendo fazer a seguinte pesquisa

select * from fotoensaio, ensaio where fotoensaio.idEnsaio = 1 and fotoensaio.idEnsaio = ensaio.idEnsaio

Como estou usando o Hibernate queria saber se é possível fazer essa consulta sem usar sql ou hql para o código ficar “mais limpo”.

5 Respostas

Kanin_Dragon

Jovem,

Você pode utilizar o criteria do hibernate. Conforme o codigo abaixo:

public List<Telefone> buscarTelefone(final Integer codigoPessoa){
		
		List<Telefone> listaTelefone = null;
		
		if(codigoPessoa!=null){
			final Criteria criteria = getManager().createCriteria(
					Telefone.class, "telefone");

			criteria.createAlias("telefone.pessoa", "pessoa", Criteria.LEFT_JOIN);
			criteria.add(org.hibernate.criterion.Restrictions.eq("pessoa.codigoPessoa", codigoPessoa));
			
			listaTelefone = (List<Telefone>) criteria.list(); 
			
			
		}
		return listaTelefone; 
		
	}

abs,

Priuli

Outro jeito seria usar a minha biblioteca..
[url]http://www.guj.com.br/java/221618-filter-dinamico-para-hibernate[/url]

Ficaria algo assim:

public List<Telefone> buscarTelefone(final Filter filter){
				
			final Criteria criteria = net.priuli.filter.utils.HibernateUtils.buildCriteria(filter, session, Telefone.class);  
			List<Telefone> listaTelefone = (List<Telefone>) criteria.list(); 

		return listaTelefone; 
		
	}

Usando seria assim, (todos os campos do objetos podem ser adicionado no filtro, para entrar como restrição no criteria do hibernate)

Filter filter = FactoryFilter.create("pessoa.id", 10L);
List<Telefone> telefones = meuDao.buscarTelefone(filter);

Estou lançando uma nova versão com integração com JPA2 e sem limite de join..

EHS

Kanin, tentei fazer comforme o seu exemplo, mas sem entender muito não consegui fazer, pois aqui aparece erro logo na primeira linha

Criteria criteria = getManager()... //esse getManager o meu netbeans não reconhece

e também se você pode me explicar melhor o que faz cada linha ficaria grato.

S

Acredito que nao caso dele o getManager() seja o “Session” pois deve estar usando algum framwork diferente tipo o spring que ja te traz isso na mão,no seu caso você dever ter um Session:
sessao.createCriteria();

espero ter ajudado

EHS

O problema do getManager() era mesmo a falta de criar uma session, então agora fiz o código da consulta deste modo, mas não está me voltando nada
e nãos ei onde está o erro.

session = hibernateUtil.getSessionFactory().openSession();
        Criteria criteria = session.createCriteria(FotoEnsaio.class, "fotoEnsaio");
        criteria.createAlias("fotoEnsaio.ensaio", "ensaio", Criteria.LEFT_JOIN);
        criteria.add(org.hibernate.criterion.Restrictions.eq("ensaio.id", idEnsaio));
        List<FotoEnsaio> listaFotoEnsaio = (List<FotoEnsaio>) criteria.list();
        return listaFotoEnsaio;
Criado 7 de junho de 2011
Ultima resposta 17 de jun. de 2011
Respostas 5
Participantes 4