Executar view com HQL

3 respostas
L

Salve pessoal,

Tenho uma dúvida… Dei uma pesquisada, mas não encontrei nda a respeito… Eu tenho em meu BD algumas views criadas para resolver alguns problemas de consultas com tabelas que estão como especialização/generalização… Minha pergunta é: Existe alguma maneira, via HQL de eu executar uma dessas views para pegar o seu resultado e polular um managedBean por exemplo?

3 Respostas

L

Da sim, vc pode executar as consultas diretamente via SQLQuery, pode usar o SQLQuery para retornar uma entidade(as colunas retornadas pelo devem ter os campos da entidade) ou até mesmo mapear suas VIEWS para entidade.

Direto
SQLQuery sq = session.createSQLQuery("SELECT ID AS ID_PESSOA, NOME AS NOM_PESSOA FROM vw_pessoa WHERE NOME LIKE :nome");
sq.setParameter("nome", "%teste%");
List<Object[]> list = sq.list();
...
Object[] obj = list.get(0);
Pessoa p = new Pessoa();
p.setId((Integer) obj[0]);
p.setNome((String) obj[1]);
Com entidade:
@Entity
class Pessoa {
  @Column(name="ID_PESSOA")
  private Integer id;
  @Column(name="NOM_PESSOA")
  private String nome;
}

SQLQuery sq = session.createSQLQuery("SELECT ID AS ID_PESSOA, NOME AS NOM_PESSOA FROM vw_pessoa WHERE NOME LIKE :nome");
sq.addEntity(Pessoa.class);
sq.setParameter("nome", "%teste%");
List<Pessoa> list = sq.list();
Mapeado:
@Entity
@Table(name = "vw_pessoa")
class Pessoa {
  @Column(name="ID")
  private Integer id;
  @Column(name="NOME")
  private String nome;
}

[color=red]Digitei esses códigos direto aqui, então pode haver alguns erros, mas a ideia é essa.[/color]

romarcio

Se você mapeou a view como demonstrou na ultima listagem, é só executar como se estivesse executando uma consulta normal em HQL. A view é um tabela, então mapeada, funciona exatamente da mesma forma que uma simples tabela.

L

entendí… vou ter que ver agora com o pessoal que fez os confs se essas views foram mapeadas. vlw a tds pela ajuda.

Criado 13 de dezembro de 2011
Ultima resposta 13 de dez. de 2011
Respostas 3
Participantes 3