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.
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
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.
[quote=fdalmarco]Vou postar aqui com HQL, espero que ajude:
No seu .hbm acresente, após o , acresente isso:
[/quote]
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
Nunca utilizei o Anotations do Hibernate.