Hibernate Query Language

Hibernate Query Language (HQL):


Hibernate Query Language (HQL) is same as SQL (Structured Query Language) but it doesn’t depends on the table of the database. Instead of table name, we use class name in HQL. So it is database independent query language.

Advantage of HQL:

There are many advantages of HQL. They are as follows:

  • database independent
  • supports polymorphic queries
  • easy to learn for Java Programmer

Query Interface:

It is an object oriented representation of Hibernate Query. The object of Query can be obtained by calling the createQuery() method of  Session interface.

The query interface provides many methods. There is given commonly used methods:

1.  public int executeUpdate() is used to execute the update or delete query.

2.  public List list() returns the result of the relation as a list.

3.  public Query setFirstResult(int rowno) specifies the row number from where record will be retrieved.

4.  public Query setMaxResult(int rowno) specifies the no. of records to be retrieved from the relation (table).

5.  public Query setParameter(int position, Object value) it sets the value to the JDBC style query parameter.

6.  public Query setParameter(String name, Object value) it sets the value to a named query parameter.

HQL getting list:

Query query=session.createQuery(“from Emp”);//here persistent class name is Emp  List list=query.list();

HQL Setting Boundaries:

Query query=session.createQuery(“from Emp”); query.setFirstResult(5); query.setMaxResult(10); List list=query.list();//will return the records from 5 to 10th number 

HQL update query:

Transaction tx=session.beginTransaction(); Query q=session.createQuery(“update User set name=:n where id=:i”); q.setParameter(“n”,”Udit Kumar”); q.setParameter(“i”,111);  int status=q.executeUpdate(); System.out.println(status); tx.commit();

HQL Select Query:

package com.param; import java.util.List; import org.hibernate.Query;import org.hibernate.Session; import com.param.utils.HibernateUtil; public class App{    public static void main( String[] args )    {        Session session = HibernateUtil.getSessionFactory().openSession();
         Query query = session.createQuery(“from Studentwhere studentId = :id “);        query.setParameter(“id”, 5);         // You can replace the above to commands with// this one        // Query query = session.createQuery(“fromStudent where studentId = 1 “);        List<?> list = query.list();         Student student = (Student)list.get(0);         System.out.println(student);    }}

HQL UPDATE QUERY:

        session.getTransaction().begin();         Query query = session.createQuery(“update Student set studentName = :studentName” + ” where studentId = :studentId”);        query.setParameter(“studentName”, “Jack”);        query.setParameter(“studentId”, 1);                 // You can replace the above to commands with this one                //Query query = session.createQuery(“update Student set studentName =’Jack’ where studentId = 1”);         int result = query.executeUpdate();        session.getTransaction().commit();    

HQL DELETE QUERY:

session.getTransaction().begin(); Query query = session.createQuery(“delete Student where studentId = :studentId”); query.setParameter(“studentId”, 1);int result = query.executeUpdate(); session.getTransaction().commit();  

HQL INSERT QUERY:

 session.getTransaction().begin(); Query query = session.createQuery(“insert into Student(studentName, studentAge,)” + ” select studentName, studentAge from old_student”);        int result = query.executeUpdate();        System.out.println(“Rows affected: ” + result);    session.getTransaction().commit();  

HIBERNATE PARAMETER BINDING:

There are two way of parameter binding:

Named Parameter:

Ex: setParameter (). setInteger (),setProperties (); in case of setProperties() we can pass the object of entity.

Query query = session.createQuery(“from Student where studentId = :id “);query.setParameter(“id”, 5); Student student = new Student(“Nikos”,”12″); Query query = session.createQuery(“from Student where studentName = :studentName “);query.setProperties(student);

Position Parameter:

Syntax is like below

Query query = session.createQuery(“from Student where student Id = ? and studentName=?”);query.setInteger(0, 1).setString(1, “Jack”);

The basic disadvantage of this method is that if you change the orders of the parameters on the query you have to change the indexes in setInteger and setString statements.