Hibernate - Dúvida implementando consultas

4 respostas
gustavodelgado

Pessoal, tenho a seguinte query:

select telas.* from int_modulotelas telas, int_modulofuncionalidades funcionalidades where nomeTela = "NovoMemorando" and telas.codigoModuloFuncionalidade = funcionalidades.codigoModuloFuncionalidade and funcionalidades.codigoModulo = 1

Como posso implementar um método com esta busca com HQL ou de preferência, com Criteria?

As classes envolvidas são:

public class ModuloTela {
    private Integer codigoModuloTela;
    private ModuloFuncionalidade moduloFuncionalidade;
    private String nomeTela;
    private String descricao;
    private char ativo = 'S';
........

public class ModuloFuncionalidade { private Integer codigoModuloFuncionalidade; private Modulo modulo; private String nomeFuncionalidade; private String descricao; private char ativo = 'S'; ...........

public class Modulo { private Integer codigoModulo; private String nomeModulo; private char ativo = 'S'; .......

Abraços.

4 Respostas

F

Vou postar aqui com HQL, espero que ajude:

No seu .hbm acresente, após o , acresente isso:

Na sua DAO:

public List findTelas(Long codigoModulo, String nomeTela) throws BusinessException

{

Session s = null;

try

{

s = getSession();

Query q = s.getNamedQuery(“buscaTela”);

q.setParameter("paramCodigoModulo ", codigoModulo);

q.setParameter(“paramNomeTela”, nomeTela);

return q.list();

}

catch(HibernateException ex)

{

checkTransaction(null, ex);

}

finally

{

closeSession(s);

}		

return Collections.EMPTY_LIST;

}

Lembre-se de que:
devem Existir os hibernates para:
IntModuloTelas t
IntModuloFuncionalidades f

Nestes hibernates devem existir os parametros:
t.nomeTela
t.codigoModuloFuncionalidade
f.codigoModuloFuncionalidade
f.codigoModulo

F

Não gosto de utilizar Criteria, mas vou colar um exemplo simples de como utilizei no passado:

public List findByCod(String codigo) throws BusinessException
{
    Session s = null;
    try
    {
        s = this.getSession();
        Criteria query = s.createCriteria(TipoVeiculo.class);

        if (codigo != null)
        {
            query.add(Expression.eq("cod", codigo));
        }

        return query.list();

    }
    catch (HibernateException e)
    {
        checkTransaction(null, e);
    }
    finally
    {
        closeSession(s);
    }
    
    return null;
}

Nunca utilizei Criteria com mais de uma tabela, acredito que isso não é possivel (posso estar), logo não tem como atender seu caso.

gustavodelgado

fdalmarco:
Vou postar aqui com HQL, espero que ajude:

No seu .hbm acresente, após o , acresente isso:

Legal… funcionou, mas eu fiz a query no próprio DAO.
Não criei uma “named query”, pois estou utilizando o Hibernate Annotations… como posso fazer uma named query com Annotations? Crio um .hbm.xml só para estas querys? É possível fazer isto?
Muito obrigado.
[]s

F

Nunca utilizei o Anotations do Hibernate.

Criado 27 de dezembro de 2006
Ultima resposta 29 de dez. de 2006
Respostas 4
Participantes 2