Converter uma consulta SQL em HQL, JPQL ou Criteria

3 respostas
J

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

3 Respostas

H

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.

J

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;
	}
H

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; }

O post citado mostra a parte de NativeQuery

Criado 17 de janeiro de 2013
Ultima resposta 17 de jan. de 2013
Respostas 3
Participantes 2