Dúvida - Hibernate / JPA - Consulta

[color=darkblue]Galera…

Apenas para dúvidas…

Como posso fazer uma consulta selecionando apenas algumas colunas do Banco de Dados…
Exemplo…

Em vez de

SELECT vo FROM PessoaVo vo

que pega todos os campos, usar este:

SELECT vo.id, vo.nome, vo.telefone FROM PessoaVo vo

Valeu!!![/color]

Exatamente da maneira que vc está fazendo só que a consulta não vai retornar uma Lista de Pessoa e sim uma Lista de Array[3] dos tipos da colunas…

[color=darkblue]Só q este Array[3] é do tipo Object… se eu não me engano…

Como pegaria estas informações ??[/color]

se eu não me engano tem uma forma de fazer assim:

SELECT PessoaVo(vo.id, vo.nome, vo.telefone) FROM PessoaVo vo

Dai na classe PessoaVo vc tem que ter um construtor passando esses parâmetros.

[color=darkblue]sim… conheço esta forma tbm… mas parece q se usar construtor com parametros, perde o conceito daki q se chama POJO…

ou eu estou enganado ?[/color]

cara eu ja fiz uma consulta com o hibernate a muito tempo nao vou arriscar em escrever pq posso postar algo errado,bom tem duas maneiras de vc fazer ista uma é usando criteria e outra que nao me arrisco a escrever o codigo é hsql procure por isso e nao se esqueca de mexer no hashcode e no equals para qnd pegar na base para forcar ele ser o mesmo objeto que esta na memoria ja tive muito problema com isso qnd fazia consulta via hsql.

[quote=Weslley][color=darkblue]Só q este Array[3] é do tipo Object… se eu não me engano…

Como pegaria estas informações ??[/color][/quote]

Simples:

metodo(HQL)

public List buscarPessoa(){
Query q = session.createQuery("SELECT vo.id, vo.nome, vo.telefone FROM PessoaVo vo");

return q.list();
}

obtendo o valores do metodo acima


//caso queira jogar o resultado num objeto pessoa
private Pessoa pessoa;
//+metodos encapsuladores


/**
* Documentação dos indíces da Array de objetos correspondentes a hql da classe PessoaDAO do metodo buscarPessoa
* posicao[0]object[0] = vo.id
* posicao[1]object[1] = vo.nome
* posicao[2]object[2] = vo.telefone
*/			

List list = new PessoaDAO().buscarPessoa();
//caso queira jogar numa lista de pessoa
List<Pessoa> listaPessoa = new ArrayList<Pessoa>();
if(!list.isEmpty()){

   for(Object[] obj: (List<Object[]>)list){
       pessoa = new Pessoa();//novo objeto, novo registro a cada interação
       pessoa.setId((Integer) obj[0]);
       pessoa.setNome((String) obj[1]);
       pessoa.setTelefone((String) obj[2]);
       //caso queira ter uma lista de pessoas      
       listaPessoa.add(pessoa);
   }
}

Pode-se fazer assim tb…

public List buscarPessoa(){
Query q = session.createQuery(“SELECT new meuPacoteDeBeans.PessoaVo(vo.id, vo.nome, vo.telefone) FROM PessoaVo vo”)
return q.list();
}

meuPacoteDeBeans é o caminho para encontrar teu bean…

no teu bean crie o construtor :
public Pessoa(Integer id, String nome, String telefone) {
this.id = id;
this.nome = nome;
this.telefone=telefone;
}

Assim essa consulta irá retornar um list de objetos Pessoa… fazendo valer a orientação a objetos!

[quote=ebarros][quote=Weslley][color=darkblue]Só q este Array[3] é do tipo Object… se eu não me engano…

Como pegaria estas informações ??[/color][/quote]

Simples:

metodo(HQL)

public List buscarPessoa(){
Query q = session.createQuery("SELECT vo.id, vo.nome, vo.telefone FROM PessoaVo vo");

return q.list();
}

obtendo o valores do metodo acima


//caso queira jogar o resultado num objeto pessoa
private Pessoa pessoa;
//+metodos encapsuladores


/**
* Documentação dos indíces da Array de objetos correspondentes a hql da classe PessoaDAO do metodo buscarPessoa
* posicao[0]object[0] = vo.id
* posicao[1]object[1] = vo.nome
* posicao[2]object[2] = vo.telefone
*/			

List list = new PessoaDAO().buscarPessoa();
//caso queira jogar numa lista de pessoa
List<Pessoa> listaPessoa = new ArrayList<Pessoa>();
if(!list.isEmpty()){

   for(Object[] obj: (List<Object[]>)list){
       pessoa = new Pessoa();//novo objeto, novo registro a cada interação
       pessoa.setId((Integer) obj[0]);
       pessoa.setNome((String) obj[1]);
       pessoa.setTelefone((String) obj[2]);
       //caso queira ter uma lista de pessoas      
       listaPessoa.add(pessoa);
   }
}

[/quote]

Valeu me salvou de uma encrenca :smiley:

ver se ajuda!http://blog.camilolopes.com.br/?p=1327