Condição Where x Hibernate

7 respostas
M

Pessoal, tenho o seguinte método usando hibernate:

//lista todas entidades
public void lista(){
	this.entidades = this.daoFactory.getEntidadeDao().listaTudo();
}

Como eu faria para incluir uma condição Where em métodos assim, do tipo: WHERE entidade.tipo = ‘F’ AND (entidade.nome LIKE ‘% :parametro %’ OR entidade.fantasia LIKE ‘% :parametro %’)

Como faço nestes casos ?? teriam exemplos ??

Valew.

7 Respostas

marcelo_mococa

você está usando criteria ou hql?

M

Xará, to começando com hibernate com base na apostila da Caelum (VRaptor + Hibernate), e nela não teve nenhuma caso com condição WHERE onde retorna uma lista.

O método chamado listaTudo() vem do DAOGenérico, onde tenho:

public List<T> listaTudo(){
	return this.session.createCriteria(this.classe).list();
}

A minha dúvida é, pra usar este WHERE que citei, uso por Anotação ou crio um DAO específico ? como proceder ?

VAlew.

jokacwb

Cara implemente no seu “DAO” um “getLista” que receba um parametro do tipo “Lista de Expressões” ± assim:

public List<T> getListaByCriteria(List<SimpleExpression> listExpress)
    {
        Criteria oCriteria = this.session.createCriteria(this.classe);

        //Verifica se foi passado Expressões e adiciona a critéria
        if (listExpress != null) for (SimpleExpression e : listExpress)
            oCriteria.add(e);

        return oCriteria.list();
    }

Dai na chamada do méto vc pode fazer ± assim:

List<SimpleExpression> listExpressao = new ArrayList<SimpleExpression>();

            listExpressao.add(Expression.eq("tipo","F"));
            listExpressao.add(Expression.like("nome","%jose%"));
            listExpressao.add(Expression.like("fantasia","%java%"));

            getListaByCriteria(listExpressao);

Tem um artigo que detalha bem isso, recomendo que de uma lida:

http://www.devx.com/Java/Article/28754

[]'s

JOKA

marcelo_mococa

como nosso amigo falou, basta adicionar Restrictions na sua criteria.

Use Restrictions e não Expression…

Criteria crit = session.createCriteria(Pessoa.class);
cri.add( Restrictions.eq( "name", "Marcelo" ) );
return cri.list();

aqui você achará o que precisa:
http://www.hibernate.org/hib_docs/v3/reference/en/html/querycriteria.html

M

marcelo_mococa:
como nosso amigo falou, basta adicionar Restrictions na sua criteria.

Use Restrictions e não Expression…

Criteria crit = session.createCriteria(Pessoa.class);
cri.add( Restrictions.eq( "name", "Marcelo" ) );
return cri.list();

Mas, to usando um DAO Genérico, e este método fica lá, neste caso eu teria que ter um DAO específico ??

Valew

marcelo_mococa

você até pode criar um DAO específico, ou pode seguir a idéia do jokacwb.

Passe uma lista de restrições. Dentro do método você itera sobre elas e vai adicionando na criteria.

M

marcelo_mococa:
você até pode criar um DAO específico, ou pode seguir a idéia do jokacwb.

Passe uma lista de restrições. Dentro do método você itera sobre elas e vai adicionando na criteria.

Declarei um atributo “buscar” na minha Entidade.class, mas como não existe este campo na tabela, porque eu declarei ele só para buscas dá erro:

ORA-00904: "ENTIDADE2_"."BUSCAR": invalid identifier

Como fazer nestes casos de busca/pesquisa ?? onde declarar os atributos dos mesmos ??

VAlew.

Criado 18 de maio de 2007
Ultima resposta 21 de mai. de 2007
Respostas 7
Participantes 3