Como eu faço com 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 :slight_smile:

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