Oi pessoal,
Tenho uma tabela com alunos e notas, quero fazer uma consulta retornando a maior, a menor e a média.
No SQL Server eu faria assim:
Como faço essa consulta usando o hibernate :?:
Oi pessoal,
Tenho uma tabela com alunos e notas, quero fazer uma consulta retornando a maior, a menor e a média.
No SQL Server eu faria assim:
Como faço essa consulta usando o hibernate :?:
E ai blz? Bem vc pode fazer de duas formas:
1 - Usando o HQL mesmo do hibernate:
// Hql
String hql = "SELECT max(nota) as Maxima, ";
hql += " min(nota) as Minima, ";
hql += " avg(nota) as Media ";
hql += " FROM " + Nota.class.getSimpleName() + " ";
// Executa
Query query = sessao.createQuery(hql);
Object[] valores = (Object[])query.list().get(0);
Double maximo = (Double) valores[0];
Double minimo = (Double) valores[1];
Double media = (Double) valores[2];
System.err.println("Maximo = " + maximo + ", Minimo = " + minimo + ", Media = " + media);
2 - Usando o criteria:
// Cria criteria
Criteria criteria = sessao.createCriteria(Nota.class);
// Maximo
criteria.setProjection(Projections.max("nota"));
Double maximo = (Double) criteria.uniqueResult();
// Minimo
criteria.setProjection(Projections.min("nota"));
Double minimo = (Double) criteria.uniqueResult();
// Media
criteria.setProjection(Projections.avg("nota"));
Double media = (Double) criteria.uniqueResult();
System.err.println("Maximo = " + maximo + ", Minimo = " + minimo + ", Media = " + media);
Blz Rimarck,
vou testar, valeu
Corrigi um negocim la, pq senao no hql vc faz tres vezes a chamada no banco…
De:
Query query = sessao.createQuery(hql);
Double maximo = (Double) query.list().get(0);
Double minimo = (Double) query.list().get(1);
Double media = (Double) query.list().get(2);
Para:
Query query = sessao.createQuery(hql);
Object[] valores = (Object[])query.list().get(0);
Double maximo = (Double) valores[0];
Double minimo = (Double) valores[1];
Double media = (Double) valores[2];