Fazendo Join com Hibernate - HQL

Pessoal tenho a seguinte SQL:


select
  tar.desc_tarefa,
  reg.inicio_execucao,
  proj.desc_projeto,
  func.nome
from
  registro reg
inner join tarefa tar on(tar.id_tarefa = reg.id_tarefa)
inner join projetos proj on(proj.id_projeto = tar.id_projeto)
inner join funcionario func on(func.id_funcionario = tar.id_funcionario)
where
  reg.fim_execucao IS NULL
and
  reg.desc_exec_tarefa IS NULL

order by reg.inicio_execucao

não consigo gerar com HQL, alguém pode me ajudar?

[]'s a Todos!

Olá

Poste a query que voce já conseguiu montar em HQL para que o pessoal possa te ajudar.
E quais são suas duvidas? Voce já conhece os conceitos basicos de HQL?

Abraços.

Daniel,

Meu conhecimento é básico em HQL, tentei algumas coisas, mas, não tenho nada aqui no serviço. Já dei uma lida em vários posts sobre esta questão, porém não consegui resolver. Se você poder indicar algum material na net ou me “dar uma mão” ficaria agradecido.

[]'s

Então…

O conceito principal que voce tem que saber sobre HQL é que diferente do SQL nativo , em vez de voce criar a query baseando se nas tabelas e colunas do banco, voce vai se basear nas Entities (Entidades) do seu sistema.

Toda entidade quando se usa JPA ou Hibernate deve se utilizar a anotação @Entity para dizer que aquela classe está associada com uma tabela no banco de dados.

Então imagine que voce tenha uma entidade Cliente no seu sistema, aquela que voce mapeou com @Entity.

Se voce quiser buscar tudo da tabela cliente através de SQL voce faria assim :

select * from TB_Cliente; ==> Esse TB_Cliente é a tabela de cliente do banco

Agora no HQl se quisesse buscar tudo tambem ficaria assim :

from Cliente; ==> Repare que esse Cliente é a entidade do seu sistema, e o ‘select’ foi omitido.

Outra coisa interessante que deve-se saber sobre diferença entre SQL e HQL é que no SQL voce recupera um ResultSet que contem dados tabulares, ou seja tudo que vier voce terá que mapear em uma entidade pra poder manipular os dados depois.
Já em HQL os dados já vem como um Objeto que representa a entidade da onde voce buscou os dados, sendo assim facilita a vida do programador e ele já tem preechido as Entidades de que precisa.

Sabe Inglês? : http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html
Otima referencia para começar :slight_smile:

Abraços.

Daniel,

Consigo fazer inserts, updates, deletes e alguns select’s básicos com WHERE e não sinto dificuldades, estou usando annotations e funciona belezinha, o problema aparece quando vou criar consultas com inner join, que tenho um pouco de dificuldade. Vou dar uma lida no material do link.

[]'s

select tar.descricao, reg.inicioExecucao, proj.descricao, func.nome from Tarefa tar, tar.registro as reg, tar.projeto as proj, tar.funcionario as func where reg.fimExecucao is null and reg.descricaoExecucaoTarefa is null order by reg.inicioExecucaoNão testei a query, mas se não for isso, é quase. Repare que considerei que a classe Tarefa possui associação um para um com as classes Registro, Projeto e Funcionario, criando os alias adequados para cada uma delas. Não é necessário criar joins, pois “navegando” pela estrutura de objetos, o hibernate já sabe criá-los quando necessário. Outra coisa, a execução dessa query não vai trazer instancias de Tarefa, mas um array de Object.

Espero que ela sirva de exemplo, e mesmo que não esteja correta, ilustra bem a idéia.

Blz? Flw! :thumbup:

Von.Juliano,

Cara muito obrigado pela força, irei testar e colocarei aqui no fórum se consegui. Só para ficar registrado todas elas são @ManytoOne e @OnetoMany.

Grato!