In this tutorial of Criteria in Hibernate Example we will discuss about the Criteria API of hibernate it is using for fetching data from the database in the Hibernate.
There are three way to pulling data from the database in the Hibernate.
- Using session methods(get() and load() methods) -limited control to accessing data
- Using HQL – Slightly more control using where clause and other clauses but there are some problems here… is more complicated to maintain in case of bigger queries with lots of clauses.
- Using Criteria API
WHAT IS CRITERIA API?
The API (Application Programming Interface) of Hibernate Criteria provides an elegant way of building dynamic query on the persistence database.
The hibernate criteria API is very Simplified API for fetching data from Criterion objects. The criteria API is an alternative of HQL (Hibernate Query Language) queries. It is more powerful and flexible for writing tricky criteria functions and dynamic queries
1. Using Criteria API to create criteria:
Criteria criteria = session.createCriteria(Student.class);
2. The Criteria API supports all the comparision operators
Criteria criteria = session.createCriteria(Student.class); criteria.add(Restrictions.eq("studentName", "Dinesh Rajput")); criteria.add(Restrictions.le("rollNumber", 1));
3. Criteria ordering query
Criteria criteria = session.createCriteria(Student.class); criteria.addOrder(Order.asc("studentName"));
The result is sort by “studentName” in descending order.
Criteria criteria = session.createCriteria(Student.class); criteria.addOrder(Order.desc("studentName"));
4. Criteria paging the result
Criteria criteria = session.createCriteria(Student.class); criteria.setMaxResults(10); criteria.setFirstResult(5);
Problem with Criteria API
Student.java
package com.sdnext.hibernate.tutorial.dto; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="STUDENT") public class Student implements Serializable { /** * serialVersionUID */ private static final long serialVersionUID = 8633415090390966715L; @Id @Column(name="ID") @GeneratedValue(strategy=GenerationType.AUTO) private int id; @Column(name="STUDENT_NAME") private String studentName; @Column(name="ROLL_NUMBER") private int rollNumber; @Column(name="COURSE") private String course; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getRollNumber() { return rollNumber; } public void setRollNumber(int rollNumber) { this.rollNumber = rollNumber; } public String getCourse() { return course; } public void setCourse(String course) { this.course = course; } public String toString() { return "ROLL Number: "+rollNumber+"| Name: "+studentName+"| Course: "+course; } }
hibernate.cfg.xml
<hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/hibernateDB2</property> <property name="connection.username">root</property> <property name="connection.password">root</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">1</property> <!-- SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="show_sql">true</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping class="com.sdnext.hibernate.tutorial.dto.Student"> </mapping></session-factory> </hibernate-configuration>
HibernateTestDemo.java
package com.sdnext.hibernate.tutorial; import java.util.List; import org.hibernate.Criteria; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.AnnotationConfiguration; import org.hibernate.criterion.Restrictions; import com.sdnext.hibernate.tutorial.dto.Student; public class HibernateTestDemo { /** * @param args */ public static void main(String[] args) { SessionFactory sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); session.beginTransaction(); Criteria criteria = session.createCriteria(Student.class); criteria.add(Restrictions.eq("studentName", "Dinesh Rajput")); List students = criteria.list(); for(Student student : students) { System.out.println(student); } session.getTransaction().commit(); session.close(); } }
Hibernate: select this_.ID as ID0_0_, this_.COURSE as COURSE0_0_, this_.ROLL_NUMBER as ROLL3_0_0_, this_.STUDENT_NAME as STUDENT4_0_0_ from STUDENT this_ where this_.STUDENT_NAME=?
ROLL Number: 1| Name: Dinesh Rajput| Course: MCA
In the Next Chapter we will discuss more about the Criteria Query with Restriction.
<<Previous Chapter 29<< >>Next Chapter 31>>