Hibernate Criteria Ordering Example
In this tutorial you will learn about the Hibernate Criteria Projection Ordering.
In Hibernate Criteria query to arrange the result set in ascending or descending order a method addOrder(Order.asc|desc()) is used.
Example
In the example given below I have used the order both ascending and descending. To order the result set in specific ordering system I have list the field first using Projections.projectionList() method in setProjection() method you can specify the number of columns by using the Projections.projectionList().add(Projections.property()) and added the properties that I want to display using the method add(Projections.property()) method then added the addOrder(Order.asc|desc()) method for ordering the projections. Then as an output displayed the list on console in their specific order.
Table goodsdealer
CREATE TABLE `goodsdealer` ( `goodsDealerId` int(15) NOT NULL, `orderedGoodsName` varchar(15) default NULL, `numOfGoodsOrder` int(20) default NULL, `priceOfGoods` int(10) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1
GoodsDealer.java
package roseindia; public class GoodsDealer { private int goodsDealerId; private int numOfGoodsOrder; private int priceOfGoods; private String orderedGoodsName; public GoodsDealer() { super(); } public GoodsDealer(int priceOfGoods, int goodsDealerId, int numOfGoodsOrder, String orderedGoodsName) { this.priceOfGoods = priceOfGoods; this.goodsDealerId = goodsDealerId; this.numOfGoodsOrder = numOfGoodsOrder; this.orderedGoodsName = orderedGoodsName; } public int getPriceOfGoods() { return priceOfGoods; } public void setPriceOfGoods(int priceOfGoods) { this.priceOfGoods = priceOfGoods; } public int getGoodsDealerId() { return goodsDealerId; } public void setGoodsDealerId(int goodsDealerId) { this.goodsDealerId = goodsDealerId; } public int getNumOfGoodsOrder() { return numOfGoodsOrder; } public void setNumOfGoodsOrder(int numOfGoodsOrder) { this.numOfGoodsOrder = numOfGoodsOrder; } public String getOrderedGoodsName() { return orderedGoodsName; } public void setOrderedGoodsName(String orderedGoodsName) { this.orderedGoodsName = orderedGoodsName; } }
GoodsDealer.hbm.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="roseindia"> <class name= "GoodsDealer" table="goodsdealer"> <id name= "goodsDealerId" type="int" column="goodsDealerId"> </id> <property name="numOfGoodsOrder"> <column name="numOfGoodsOrder"/> </property> <property name="orderedGoodsName"> <column name="orderedGoodsName"/> </property> <property name="priceOfGoods"> <column name="priceOfGoods"/> </property> </class> </hibernate-mapping>
HibernateCriteriaOrderingExample.java
package roseindia; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.criterion.Order; import org.hibernate.criterion.Projections; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; public class HibernateCriteriaOrderingExample { private static SessionFactory sessionFactory; private static ServiceRegistry serviceRegistry; public static void main(String args[]) { Session session = null; try { try { Configuration cfg= new Configuration().addResource("roseindia/GoodsDealer.hbm.xml"); cfg.configure(); serviceRegistry = new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); sessionFactory = cfg.buildSessionFactory(serviceRegistry); } catch(Throwable th) { System.err.println("Failed to create sessionFactory object." + th); throw new ExceptionInInitializerError(th); } session = sessionFactory.openSession(); Criteria criteria = session.createCriteria(GoodsDealer.class); // To order the rows in ascending order criteria.setProjection(Projections.projectionList() .add(Projections.property("numOfGoodsOrder")) .add(Projections.property("priceOfGoods"))) .addOrder(Order.asc("numOfGoodsOrder")); // To order the rows in descending order // criteria.setProjection(Projections.projectionList() // .add(Projections.property("numOfGoodsOrder")) // .add(Projections.property("priceOfGoods"))) // .addOrder(Order.desc("numOfGoodsOrder")); List order = criteria.list(); Iterator it = order.iterator(); System.out.println("numOfGoodsOrder priceOfGoods"); while(it.hasNext()) { Object[] obj = (Object[])it.next(); System.out.println(obj[0]+"\t\t "+obj[1]); } } catch(Exception e) { System.out.println(e.getMessage()); } finally { session.close(); } } }
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://192.168.10.13:3306/data </property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.pool_size">10</property> <property name="show_sql">true</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.current_session_context_class">thread</property> </session-factory> </hibernate-configuration>
Output :
1. table goodsdealer
2. When you will execute the HibernateCriteriaOrderingExample.java file (RightClick -> RunAs -> Java Application) the following queries respective to both ascending and descending and the output will be displayed on console as :
Hibernate Query for ascending order
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) Mar 21, 2012 6:54:21 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory Hibernate: select this_.numOfGoodsOrder as y0_, this_.priceOfGoods as y1_ from goodsdealer this_ order by this_.numOfGoodsOrder asc
2.1 Output of ascending order list is as follows :
Hibernate Query for descending order
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions) Mar 21, 2012 7:48:07 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init> INFO: HHH000397: Using ASTQueryTranslatorFactory Hibernate: select this_.numOfGoodsOrder as y0_, this_.priceOfGoods as y1_ from goodsdealer this_ order by this_.numOfGoodsOrder desc
2.2 Output of descending order list is as follows :