In this tutorials, we are going to learn about Hibernate Restrictions with Example. In the previous tutorial we had a detailed discussion about Hibernate Projections and how to use them. Coming to the Hibernate Restrictions, if we want to apply a condition in criteria query, then we can use Restrictions.
Bullet points about Hibernate Restrictions :
- If we want to apply a condition to criteria query, we need Criterion object.
- Criterion is an interface, it is an object-oriented representation of a query criterion that may be used as a restriction in a Criteria query.
- We can obtain the Criterion type objects, by calling static methods of Restrictions class.
- Restrictions is a normal Java class, which doesn’t implement any Criterion interface.
- Criterion interface and Restrictions class, both are coming from org.hibernate.criterion package.
Hibernate Restrictions Example :
If we want to read employees, who are working in department 101, then a condition can be added like the following:
Criteria criteria = session.createCriteria(Employee.class);
Criterion criterion = Restrictions.eq("departmentId", 101);
criteria.add(criterion);
On the above example, we are trying to get the employees who are working in department 101. This is exactly like select * from emp where deptno=101
in SQL.
Adding multiple conditions :
If we want to add, 2 or more conditions using Hibernate Restrictions, both conditions are added like below:
Criteria criteria = session.createCriteria(Employee.class);
Criterion criterion = Restrictions.eq("departmentId", 101);
Criterion criterion2 = Restrictions.gt("salary", 4000);
Criterion criterion3 = Restrictions.and(criterion,criterion2);
criteria.add(criterion3);
In the above example, we are trying to get the employees information, who are working in department id = 101 and salary > 4000. This is exactly like select * from emp where deptid=101 and salary > 4000
in SQL. Restrictions class has and() method to apply the ‘and condition’ in a query. We can add variable number of conditions in and() method like and(criterion,criterion-2,criterion-3,.....,criterion-n);
Important methods in Hibernate Restrictions :
between(String propertyName, Object lo, Object hi)
Apply a “between” constraint to the named propertyeq(String propertyName, Object value)
Apply an “equal” constraint to the named propertyge(String propertyName, Object value)
Apply a “greater than or equal” constraint to the named propertygt(String propertyName, Object value)
Apply a “greater than” constraint to the named propertyilike(String propertyName, Object value)
A case-insensitive “like”, similar to Postgres ilike operatorin(String propertyName, Object[] values)
Apply an “in” constraint to the named propertyle(String propertyName, Object value)
Apply a “less than or equal” constraint to the named propertylike(String propertyName, Object value)
Apply a “like” constraint to the named propertylt(String propertyName, Object value)
Apply a “less than” constraint to the named propertyne(String propertyName, Object value)
Apply a “not equal” constraint to the named propertyor(Criterion lhs, Criterion rhs)
Return the disjuction of two expressions
Hibernate Restrictions Example :
Employee.java
package com.otp.hibernate.pojo;
public class Employee {
private int employeeId;
private String employeeName;
private int departmentId;
private int salary;
public int getEmployeeId() {
return employeeId;
}
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
public String getEmployeeName() {
return employeeName;
}
public void setEmployeeName(String employeeName) {
this.employeeName = employeeName;
}
public int getDepartmentId() {
return departmentId;
}
public void setDepartmentId(int departmentId) {
this.departmentId = departmentId;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee [employeeId=" + employeeId + ", employeeName="
+ employeeName + ", departmentId=" + departmentId + ", salary="
+ salary + "]";
}
}
employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.otp.hibernate.pojo.Employee" table="employee"
schema="onlinetutorialspoint">
<id name="employeeId" column="id">
<generator class="increment" />
</id>
<property name="employeeName" column="ename" />
<property name="departmentId" column="deptNo" />
<property name="salary" column="salary" />
</class>
</hibernate-mapping>
Main.java
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import com.otp.hibernate.pojo.Employee;
public class Main {
public static void main(String[] args) {
Configuration configuration = new Configuration()
.configure("hibernate.cfg.xml");
StandardServiceRegistryBuilder builder = new StandardServiceRegistryBuilder()
.applySettings(configuration.getProperties());
SessionFactory factory = configuration.buildSessionFactory(builder
.build());
Session session = factory.openSession();
System.out.println("Reading Complete Entity with Condition");
Criteria criteria = session.createCriteria(Employee.class);
Criterion criterion = Restrictions.eq("departmentId", 101);
Criterion criterion2 = Restrictions.gt("salary", 4000);
Criterion criterion3 = Restrictions.and(criterion,criterion2);
criteria.add(criterion3);
List list = criteria.list();
Iterator it = list.iterator();
while (it.hasNext()) {
Employee emp = (Employee) it.next();
System.out.println("Employee : " + emp.toString());
}
session.close();
}
}
Output :
Reading Complete Entity with Condition
Employee : Employee [employeeId=1, employeeName=Chandra, departmentId=101, salary=6000]
Employee : Employee [employeeId=2, employeeName=Shekhar, departmentId=101, salary=8000]
Complete example is available for download.
Happy Learning 🙂