Selecionar apnas alguns campos em uma query
Bom dia a todos, estou desenvolvendo um projeto utilizando o JPA, e estou com um problema preciso que seja feito um select no banco de dados de apenas alguns campos da minha entidade, para nao ficar pessado a lista de retorno, exemplo:
Entidade pessoa( nome, cpf, endereco, etc...), no momento de criar a query preciso que seja selecionado apenas os campos nome e cpf, conforme exemplo abaixo.
Porem esta dando erro ao executar nao sei se é pela sintaxe.
Tambem gostaria de saber se ao usuar a native queries, tem alguma diferença, pois seria uma saida.
Desde já Obrigado
Fernando Luiz.
Entidade pessoa( nome, cpf, endereco, etc...), no momento de criar a query preciso que seja selecionado apenas os campos nome e cpf, conforme exemplo abaixo.
Porem esta dando erro ao executar nao sei se é pela sintaxe.
Tambem gostaria de saber se ao usuar a native queries, tem alguma diferença, pois seria uma saida.
@NamedQueries({ @NamedQuery( Name=”findAllpessoa”, Query=”select p.nome, p.cpf from pessoa p ”), })
Desde já Obrigado
Fernando Luiz.
Fernando Silva
Curtidas 0
Respostas
Davi Costa
08/11/2011
Posta o erro, vai ficar melor de te ajudar.
att Davi
att Davi
GOSTEI 0
Fernando Silva
08/11/2011
Obrigado pela atenção amigo, mas acho que estava fazendo algo de errado e tinha desistido rapido.
Ao tentar forca o erro novamente, para postar, funcionou perfeitamente.
Valeu.
Ao tentar forca o erro novamente, para postar, funcionou perfeitamente.
Valeu.
GOSTEI 0
Robson Teixeira
08/11/2011
So uma opinião alheia mas o erro provavel não seria o pessoa com o caracter p em minusculo??? ja que pelo JPQL ele busca os atributos da classe Pessoa.
att
robson
att
robson
GOSTEI 0
Dyego Carmo
08/11/2011
Existe um recurso muito legal no JPA/HIBERNATE , utilizar construtores de classe...
vc cria um contrutor com 2 strings nesta sua classe e pode fazer algo do genero:
select new br.com.devmedia.MinhaPessoa(p.nome,p.sobrenome) from MinhaPessoa p;
ele vai criar a classe utilizando o construtor , muito legal ;)
vc cria um contrutor com 2 strings nesta sua classe e pode fazer algo do genero:
select new br.com.devmedia.MinhaPessoa(p.nome,p.sobrenome) from MinhaPessoa p;
ele vai criar a classe utilizando o construtor , muito legal ;)
GOSTEI 0
Fernando Silva
08/11/2011
Existe um recurso muito legal no JPA/HIBERNATE , utilizar construtores de classe...
vc cria um contrutor com 2 strings nesta sua classe e pode fazer algo do genero:
select new br.com.devmedia.MinhaPessoa(p.nome,p.sobrenome) from MinhaPessoa p;
ele vai criar a classe utilizando o construtor , muito legal ;)
vc cria um contrutor com 2 strings nesta sua classe e pode fazer algo do genero:
select new br.com.devmedia.MinhaPessoa(p.nome,p.sobrenome) from MinhaPessoa p;
ele vai criar a classe utilizando o construtor , muito legal ;)
Diego voce salvou meu dia, era exatamente isto que precisava, porque eu até consegui selecionar apenas alguns campos, porem o getresultlist vinnha como array de object e nao do tipo que eu queria, ai tive que fazer uma adaptação tecnica para converter para o tipo esperado com demais campos nulos, veja abaixo. Agora resolvi a questao de forma elegante, muito Obrigado a você e aos demais.
Só pra explicar a necessidade disto, é que preciso que as tabelas vinculadas a esta classe sejam carregadas só no momento de edição, e para listar e consultar usuarei só a tabela principal com os campos basicos, ou seja usarei o recurso lazy, só quando necessario sem precisar desabilita-lo, pois ajuda muito na produtividade, não sei se fui claro, mas é isto.
E mais uma vez obrigado
//Antiga NamedQuery que resultava lista de object @NamedQuery(name = GerCliente1.findAll, query = SELECT g.idcodigo1, g.nome1, g.cgcCpf1, g.insestRg1, + g.nomfan1, g.contato1 ,g.obs1, g.insmun1 + FROM GerCliente1 g Order By g.idcodigo1 ), // Nova NamedQuery que resulta o que eu quero objeto tipo GerCliente1 @NamedQuery(name = GerCliente1.findAll, query = SELECT new entidades.ger.GerCliente1(g.idcodigo1, + g.nome1, g.cgcCpf1, g.insestRg1, + g.nomfan1, g.contato1 ,g.obs1, g.insmun1) + FROM GerCliente1 g Order By g.idcodigo1 ), //Adaptação tecnica para o resultado com a antiga namedquery lRetorno = q.getResultList(); for(int iCount = 0;iCount < lRetorno.size();iCount++){ cCliente = new GerCliente1(); vCliente = (Object[]) lRetorno.get(iCount); cCliente.setIdcodigo1((Long) vCliente[0]); cCliente.setNome1((String) vCliente[1]); cCliente.setCgcCpf1((String) vCliente[2]); cCliente.setInsestRg1((String) vCliente[3]); cCliente.setNomfan1((String) vCliente[4]); cCliente.setContato1((String) vCliente[5]); cCliente.setObs1((String) vCliente[6]); cCliente.setInsmun1((String) vCliente[7]); lCliente.add(cCliente); } return lCliente; //Com a que voce passou voltou o que era return q.getResultList();
GOSTEI 0
Davi Costa
08/11/2011
Show de bola Fernando Luiz. Muito boa a iniciativa de postar sua solução, assim que possível favor fechar o chamado.
att Davi
att Davi
GOSTEI 0
Fernando Silva
08/11/2011
Show de bola Fernando Luiz. Muito boa a iniciativa de postar sua solução, assim que possível favor fechar o chamado.
att Davi
att Davi
Ok, desculpe a bobeira, mas como fecha o chamado ?
GOSTEI 0
Dyego Carmo
08/11/2011
vEJA NO TOPO DO CHAMADO :)
GOSTEI 0
Fernando Silva
08/11/2011
vEJA NO TOPO DO CHAMADO :)
Ok, olhei e não vi esta opção de fechar, poderia fechar pra mim, creio que nao tenho acesso.
GOSTEI 0