Prezados colegas estou com dúvida de como converter essa SQL para o HQL, JPQL ou Criteria. Se alguém poder me ajudar ficarei grato.
SELECT tipologia, COUNT(nome) as qtd, COUNT(if(year(dia)=2010,tipologia,null)) as a2010, COUNT(if(year(dia)=2011,tipologia,null)) as a2011, COUNT(if(year(dia)=2012,tipologia,null)) as a2012, COUNT(if(year(dia)=2013,tipologia,null)) as a2013
FROM inauguracao WHERE tipologia <> ' ' AND dia >= '2011-01-01' AND dia <= now() GROUP BY tipologia ORDER BY qtd DESC
Isso COUNT(if(year(dia)=2010,tipologia,null)) não funciona com JPQ/HQL nem Criteira.
Você tem que entende que essas coisas são específicas do banco, e não algo “genérico” que rodaria em todo o banco de dados.
Esse post mostra as funções disponíveis para JPQL: JPA: Mini Livro - Primeiros passos e conceitos detalhados.
Ok! Amigo, mas é possível eu usar um native query que não me traga apenas a posição de memória.
Fiz um list e ele me retornou apenas a posição de memória.
Existe outra maneira de trazer os parametrôs.
public List<Object[]> BuscarTodos() {
EntityManager em = new JPAUtil().getEntityManager();
Query query = em
.createNativeQuery("SELECT tipologia, COUNT(nome) as qtd, COUNT(if(year(dia)=2010,tipologia,null)) as a2010,"
+ "COUNT(if(year(dia)=2011,tipologia,null)) as a2011, COUNT(if(year(dia)=2012,tipologia,null)) as a2012 "
+ "FROM inauguracao WHERE tipologia <> ' ' AND dia >= '2011-01-01' AND dia <= now()"
+ "GROUP BY tipologia ORDER BY qtd DESC");
List<Object[]> tipologia = query.getResultList();
em.close();
return tipologia;
}
[quote=joelson123]Ok! Amigo, mas é possível eu usar um native query que não me traga apenas a posição de memória.
Fiz um list e ele me retornou apenas a posição de memória.
Existe outra maneira de trazer os parametrôs.
public List<Object[]> BuscarTodos() {
EntityManager em = new JPAUtil().getEntityManager();
Query query = em
.createNativeQuery("SELECT tipologia, COUNT(nome) as qtd, COUNT(if(year(dia)=2010,tipologia,null)) as a2010,"
+ "COUNT(if(year(dia)=2011,tipologia,null)) as a2011, COUNT(if(year(dia)=2012,tipologia,null)) as a2012 "
+ "FROM inauguracao WHERE tipologia <> ' ' AND dia >= '2011-01-01' AND dia <= now()"
+ "GROUP BY tipologia ORDER BY qtd DESC");
List<Object[]> tipologia = query.getResultList();
em.close();
return tipologia;
}
[/quote]O post citado mostra a parte de NativeQuery