Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida sobre uma Query

Eu estou com uma duvida em relação a fazer querys mais complexas, eu teria que usar um conection.createStatement()? pra poder fazer uma query do modo tradicional e escreve-la na mão? Essa duvida veio por que enquanto estou fazendo o curso fiquei pensando no meu trabalho, la eu tenho que normalmente fazer umas querys cabulosas pra pegar os resultados que preciso, geramente dando join em varias tabelas e fazendo os where´s mais variados testando varios campos e condições. No curso de JPA eu vi que posso usar o jpql pra fazer as consultas e tal, mas mesmo assim continua sendo meio limitado pelo que entendi. E nesse curso tb, eu pego um registro ou pego um select * por ex, mas se eu quiser fazer uma pagina com os resultados de uma consulta complexa o que devo usar? Desculpe se sai do contexto da aula. Mas é uma duvida que me perturba já faz tempo na verdade hehehe.. desde outros cursos.

2 respostas
solução!

Fala aí César, blz?

Cara através da JPA você consegue escrever query nativa com createNativeQuery. Dessa forma você consegue montar as querys com um controle mais fino do que será selecionado.

No caso de você não querer todos os campos de uma tabela, ou precisar usar alguns campos e outros serão calculados, você vai precisar de um DTO (Data Transfer Object). Algum objeto que represente o resultado da sua query.

Por exemplo imagine que temos uma entidade Cliente e uma entidade Vendas e nesse caso muitas vendas tem um cliente. E queremos extrair uma consulta que totalize as vendas por cliente.

Por questões de simplicidade vamos assumir que o valor da venda seja do tipo double.

Teríamos que criar uma classe com dois atributos um para representar o valor total e um para o cliente.

package br.com.bla.bla.bla;
class TotalDeVendasPorCliente {
    private Cliente cliente;
    private double total;

    public TotalDeVendasPorCliente( Cliente cliente, double total){
        this.cliente = cliente;
        this.total = total;
    }    

    //getters e setters
}

Com nosso DTO criado podemos criar uma query com jpql por exemplo:

List<TotalDeVendasPorCliente> resultado = em.createQuery(" select new br.com.bla.bla.bla.TotalDeVendasPorCliente( v.cliente, sum(v.total) ) from Vendas v group by v.cliente where ...").getResultList();

Vlw Fernando.. era algo assim que eu estava pensando que seria meio dificil fazer.. usando group by fazendo sum, mas vejo que é parecido com um select normal... vou estudar mais sobre jpql pra dominar melhor essa ferramenta..

obrigado