Detached Criteria Average
The following example shows how to use Hibernate Detached Criteria.
It returns the companies having employee count greater than average employee count.
Refer first example for the configuration and mapping.
package com.bethecoder.tutorials.hibernate.basic.criteria;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Property;
import com.bethecoder.tutorials.hibernate.basic.Company;
import com.bethecoder.tutorials.hibernate.basic.util.HibernateUtil;
public class DetachedCriteriaAvgTest {
/**
* @param args
*/
public static void main ( String [] args ) {
Session session = HibernateUtil.getSessionFactory () .openSession () ;
session.beginTransaction () ;
DetachedCriteria avgEmpCnt =
DetachedCriteria.forClass ( Company. class )
.setProjection ( Property.forName ( "employeeCount" ) .avg () ) ;
Criteria criteria = session.createCriteria ( Company. class ) ;
criteria.add ( Property.forName ( "employeeCount" ) .gt ( avgEmpCnt )) ;
List<Company> companies = criteria.list () ;
System.out.println ( "Selected row count : " + companies.size ()) ;
for ( Company company : companies ) {
System.out.println ( company ) ;
}
session.getTransaction () .commit () ;
session.close () ;
}
}
It gives the following output,
Selected row count : 4
{ id = 4, name = IJK, employeeCount = 67890,
projectCount = 850, address1 = add1112, address2 = add2223 }
{ id = 5, name = ART, employeeCount = 67890,
projectCount = 850, address1 = add1112, address2 = add2223 }
{ id = 6, name = RNK, employeeCount = 98890,
projectCount = 8478, address1 = add1412, address2 = add27823 }
{ id = 7, name = AOQ, employeeCount = 97890,
projectCount = 4578, address1 = add17892, address2 = add2893 }