Dynamic Query তৈরি করার জন্য Criteria API

Hibernate Criteria API - হাইবারনেট (Hibernate) - Java Technologies

366

Hibernate Criteria API হল একটি শক্তিশালী উপায় যার মাধ্যমে ডাইনামিক কুয়েরি তৈরি করা যায়। এটি Hibernate ORM ফ্রেমওয়ার্কে Object-Oriented কোড লিখে SQL কুয়েরি তৈরি করতে সহায়তা করে। Criteria API আপনাকে Type-safe, dynamic queries, এবং complex queries তৈরির সুবিধা প্রদান করে, যেখানে আপনি JPA-এর CriteriaBuilder এবং CriteriaQuery ব্যবহার করে কোডের মাধ্যমে কুয়েরি তৈরি করতে পারেন।

Criteria API: Overview

Criteria API হাইবারনেট 3.x-এ তৈরি হয়েছিল এবং এটি JPA (Java Persistence API) স্পেসিফিকেশনের অংশ হিসেবে JPA Criteria API হিসেবে উন্নত করা হয়েছে। Hibernate Criteria API মূলত ডাইনামিক কুয়েরি তৈরি করতে ব্যবহৃত হয়, যেখানে আপনার কুয়েরি প্রোগ্রাম্যাটিকভাবে তৈরি করা হয় এবং type-safe থাকে।

Advantages of Criteria API:

  1. Type-Safe Queries: Type checking at compile time.
  2. Dynamic Queries: You can build queries dynamically based on conditions.
  3. More Readable and Maintainable: Easier to maintain and debug.
  4. Avoid SQL Injection: Safe from SQL injection attacks as it avoids concatenating raw strings.

1. Setting Up Hibernate Criteria API

Entity Class Example (Student):

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Student {
    @Id
    private int id;
    private String name;
    private String course;

    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCourse() {
        return course;
    }

    public void setCourse(String course) {
        this.course = course;
    }
}

2. Example: Basic Query Using Criteria API

Basic Query to get all students:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);
            
            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

In this example, the Criteria object retrieves all students from the Student table. The query is simple and fetches all records.


3. Using Restrictions for Filtering Criteria

You can use Restrictions to add conditions to your query (similar to WHERE in SQL).

Example: Filter Students by Course

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);
            
            // Apply restriction to filter students by course
            criteria.add(Restrictions.eq("course", "Java")); // Similar to WHERE course='Java'

            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

In this example:

  • Restrictions.eq() is used to filter students whose course is "Java".

4. Using Multiple Restrictions for Complex Queries

You can combine multiple restrictions (conditions) using Restrictions.and() or Restrictions.or().

Example: Filter Students by Course and Name

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);
            
            // Apply multiple restrictions (AND condition)
            criteria.add(Restrictions.eq("course", "Java"));
            criteria.add(Restrictions.like("name", "John%")); // Name starts with John

            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

In this example:

  • Restrictions.like() is used to filter students whose names start with "John".
  • Multiple restrictions are applied with an implicit AND.

5. Sorting Results Using Criteria API

You can easily sort the results using Order.

Example: Sorting Students by Name

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Order;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);
            
            // Sort the students by name in ascending order
            criteria.addOrder(Order.asc("name"));

            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

In this example:

  • Order.asc("name") sorts the results by student name in ascending order.

6. Paginate Results Using Criteria API

You can also paginate results using setFirstResult() and setMaxResults().

Example: Pagination

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Criteria;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);

            // Set pagination parameters (page 1 with 5 records per page)
            criteria.setFirstResult(0);
            criteria.setMaxResults(5);

            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

In this example:

  • setFirstResult(0): This sets the first record to fetch (start at the first record).
  • setMaxResults(5): This limits the number of records to 5.

7. Dynamic Queries Using Criteria API

You can dynamically build queries based on conditions, allowing for flexible and reusable code.

Example: Dynamic Query Creation

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Criteria;
import org.hibernate.criterion.Restrictions;

import java.util.List;

public class CriteriaExample {
    public static void main(String[] args) {
        SessionFactory factory = HibernateUtil.getSessionFactory();
        Session session = factory.getCurrentSession();
        try {
            session.beginTransaction();

            // Create a Criteria instance
            Criteria criteria = session.createCriteria(Student.class);

            // Dynamically add restrictions
            String course = "Java";  // Can be dynamically set
            if (course != null && !course.isEmpty()) {
                criteria.add(Restrictions.eq("course", course));
            }

            // Execute the query and get the list of students
            List<Student> students = criteria.list();
            
            for (Student student : students) {
                System.out.println(student.getName() + ": " + student.getCourse());
            }

            session.getTransaction().commit();
        } finally {
            factory.close();
        }
    }
}

Here, the query is dynamically adjusted based on the condition, which makes it flexible for use in various scenarios.


Hibernate Criteria API একটি শক্তিশালী এবং type-safe উপায়, যা dynamic queries তৈরি করতে সাহায্য করে। এর মাধ্যমে আপনি complex queries তৈরি করতে পারেন এবং filters, sorting, pagination সহ বিভিন্ন কার্যক্রম পরিচালনা করতে পারেন। Criteria API ব্যবহার করলে SQL-এর মতো কুয়েরি লিখতে হয় না, এবং কোড লিখতে অনেক বেশি সুবিধা হয় কারণ এটি type-safe এবং compile-time checking প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...