How to use OR operator in hibernate Detached criteria query?
You can use OR operator in hibernate detachedCriteria through Restrictions.disjunction(). Detached Criteria query is a facility provide by Hibernate to write criteria queries in ?detached mode?, where hibernate session is not available. You can instantiate this class anywhere.
Example:
package net.roseindia.main;
import java.util.*;
import net.roseindia.table.Employee;
import net.roseindia.util.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Property;
import org.hibernate.criterion.Restrictions;
public class DetachedCriteriaOR {
public static void main(String[] args) {
DetachedCriteria detachedCriteria = DetachedCriteria
.forClass(Employee.class);
detachedCriteria.add(Restrictions.disjunction()).add(
Property.forName("id").le(4)).add(
Property.forName("name").like("R%"));
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
List<Employee> employeeList = new ArrayList<Employee>();
employeeList = detachedCriteria.getExecutableCriteria(session).list();
Iterator it = employeeList.iterator();
while (it.hasNext()) {
Employee employee = (Employee) it.next();
System.out.println("Name : " + employee.getName());
System.out.println("Salary : " + employee.getSalary());
System.out.println("Date of Join : " + employee.getDateOfJoin());
}
session.close();
}
}
Output:
Hibernate: select this_.emp_id as emp1_0_0_, this_.date_of_join as date2_0_0_, this_.name as name0_0_, this_.salary as salary0_0_ from employee this_ where 1=1 and this_.emp_id<=? and this_.name like ? Name : Ron Salary : 10000 Date of Join : 2010-03-12 00:00:00.0 Name : Roxi Salary : 220000 Date of Join : 2001-02-03 00:00:00.0
Description: In this example we are checking two conditions one is id must be less than equal to 4 and another one name must start with R character. Restrictions.disjunction() is used here for OR operator. Restrictions.disjunction() combinedly check both conditions and return result if any one expression is true.