How to use AND operator in hibernate Detached criteria query?
You can use AND operator in hibernate detachedCriteria through Restrictions.conjunction(). 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 DetachedCriteriaAND { public static void main(String[] args) { DetachedCriteria detachedCriteria = DetachedCriteria .forClass(Employee.class); detachedCriteria.add(Restrictions.conjunction()).add( Property.forName("id").eq(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 : Roxi Salary : 220000 Date of Join : 2001-02-03 00:00:00.0
Description: In this example we are checking two conditions (id must be equal to 4 and name must start with R character) combinedly. Restrictions.conjunction() is used here for AND operator. Restrictions.conjunction() combinedly check both conditions and return true if both conditions are true