Thursday, November 18, 2010

Hibernate projection max, avg, min, count example

How do I use min, max, avg and sum Projections?

Category: org.hibernate, viewed: 7K time(s).
The code below demonstration the use of Projections.min(), Projections.max(), Projections.avg() and Projections.sum().
package org.kodejava.example.hibernate.criteria;

 
import org.hibernate.SessionFactory;
import org.hibernate.Session;
import org.hibernate.HibernateException;
import org.hibernate.Criteria;
import org.hibernate.criterion.Projections;
import org.hibernate.cfg.AnnotationConfiguration;
import org.kodejava.example.hibernate.model.Track;

 
public class MinMaxAvgSumProjectionsDemo {
    private static final SessionFactory sessionFactory;

 
    static {
        try {
            sessionFactory = new AnnotationConfiguration().
                    configure("hibernate.cfg.xml").
                    buildSessionFactory();
        }
        catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
        }
    }

 
    public static Session getSession() throws HibernateException {
        return sessionFactory.openSession();
    }

 
    public static void main(String[] args) {
        final Session session = getSession();
        try {
            Criteria criteria = session.createCriteria(Track.class)
                    .setProjection(Projections.max("duration"));
            Integer maxDuration = (Integer) criteria.uniqueResult();
            System.out.println("Max Track Duration = " + maxDuration);

 
            criteria.setProjection(Projections.min("duration"));
            Integer minDuration = (Integer) criteria.uniqueResult();
            System.out.println("Min Track Duration = " + minDuration);

             
            criteria.setProjection(Projections.avg("duration"));
            Double avgDuration = (Double) criteria.uniqueResult();
            System.out.println("Avg Track Duration = " + avgDuration);

             
            criteria.setProjection(Projections.sum("duration"));
            Integer totalDuration = (Integer) criteria.uniqueResult();
            System.out.println("Total Track Duration = " + totalDuration);
        } finally {
            session.close();
        }
    }
}

No comments: