Friday, January 6, 2012

Queries in HIBERNATE

Querying is one of most important part in Hibernate. For this purpose we have to use HQL (Hibernate Query Language). HQL is simpler than SQL and bit differ from SQL. Here in HQL we consider on Classes instead of Tables and we consider on Attributes instead of Columns.
Lets see how to querying from Hibernate.
For this example I have used a College , Student relation which is a one to many association.

College.java
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;

@Entity
public class College {

 private int collegeId;
 private String collegeName;
 private List<Student> students;
 
 @Id
 @GeneratedValue
 public int getCollegeId() {
  return collegeId;
 }
 
 public void setCollegeId(int collegeId) {
  this.collegeId = collegeId;
 }
 
 public String getCollegeName() {
  return collegeName;
 }
 
 public void setCollegeName(String collegeName) {
  this.collegeName = collegeName;
 }
 
 @OneToMany(targetEntity=Student.class,cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="college")
 public List<Student> getStudents() {
  return students;
 }
 
 public void setStudents(List<Student> students) {
  this.students = students;
 }
}
Student.java
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;


@Entity
public class Student {

 private int studentId;
 private String studName;
 private College college;
 
 @Id
 @GeneratedValue
 public int getStudentId() {
  return studentId;
 }
 
 public void setStudentId(int studentId) {
  this.studentId = studentId;
 }
 
 public String getStudName() {
  return studName;
 }
 
 public void setStudName(String studName) {
  this.studName = studName;
 }
 
 @ManyToOne
 @JoinColumn(name="college_id")
 public College getCollege() {
  return college;
 }
 
 public void setCollege(College college) {
  this.college = college;
 }
 
}
Test.java
import java.util.Iterator;
import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;


public class Test {

 /**
  * @param args
  */
 public static void main(String[] args) {
  AnnotationConfiguration config=new AnnotationConfiguration();
  config.addAnnotatedClass(College.class);
  config.addAnnotatedClass(Student.class);
  config.configure("hibernate.cfg.xml");
  
  //creating tables
//  new SchemaExport(config).create(true, true);
  
  //adding sample data
//  SessionFactory factory=config.buildSessionFactory();
//  Session session=factory.getCurrentSession();
//  
//  session.beginTransaction();
//  
//  College c1=new College();
//  c1.setCollegeName("Richmond College");
//  
//  College c2=new College();
//  c2.setCollegeName("Mahinda College");
//  
//  Student st1=new Student();
//  st1.setStudName("Kanishka Dilshan");
//  st1.setCollege(c1);
//  Student st2=new Student();
//  st2.setStudName("Sajith Athukorala");
//  st2.setCollege(c1);
//  Student st3=new Student();
//  st3.setStudName("Sampath Bandara");
//  st3.setCollege(c1);
//  
//  Student st4=new Student();
//  st4.setStudName("Dasun Pathirana");
//  st4.setCollege(c2);
//  Student st5=new Student();
//  st5.setStudName("Kasun Sameera");
//  st5.setCollege(c2);
//  
//  session.save(c1);
//  session.save(c2);
//  session.save(st1);
//  session.save(st2);
//  session.save(st3);
//  session.save(st4);
//  session.save(st5);
//  
//  session.getTransaction().commit();
  
  //query part
  
  SessionFactory factory=config.buildSessionFactory();
  Session session=factory.getCurrentSession();
  session.beginTransaction();
  
  Query query=session.createQuery("from Student s where s.studName like :name_p");
  query.setParameter("name_p", "%k%");
  List lst=query.list();
  printTheList(lst);
  
  session.getTransaction().commit();
  System.out.println("Size : " + lst.size());

 }
 
 private static void printTheList(List lst){
  Iterator itr=lst.iterator();
  while(itr.hasNext()){
   Student s=(Student) itr.next();
   System.out.println(s.getStudName());
  }
 }

}

Note :
The simplest way to execute a HQL query is
  • Start a transaction
  • Create a Query object using session.createQuery("HQL Query")
  • Set parameters if any
  • Retrieve the HQL result to a List object by executing list() method in the Query object
  • Now it is the time to play with the retrieved List object :)
Eg :
session.beginTransaction();
Query query=session.createQuery("from Student");
List listResults=query.list();
session.getTransaction().commit();
Note 2 :
:name_p is a parameter. in HQL colon(:) is used to denote the beginning of a parameter.

Result :

0 comments:

Post a Comment

© kani.stack.notez 2012 | Blogger Template by Enny Law - Ngetik Dot Com - Nulis