Java Technologies JPA Query Language (JPQL) এবং Hibernate গাইড ও নোট

431

JPA Query Language (JPQL) হল একটি Object-Relational Mapping (ORM) এর জন্য তৈরি করা query language, যা Java Persistence API (JPA) এর অংশ। JPQL ব্যবহার করে আমরা Java objects এবং relational database tables এর মধ্যে সম্পর্ক অনুসন্ধান করতে পারি। JPQL SQL-এর মতো দেখতে হলেও এটি database tables এর পরিবর্তে Java objects এবং তাদের properties এর উপর ভিত্তি করে কাজ করে।

Hibernate-এ JPQL ব্যবহার করা যেতে পারে, কারণ Hibernate হল JPA implementation। Hibernate ডেটাবেসে JPQL queries সম্পাদন করতে সক্ষম, যা ডেটাবেসের সাথে সম্পর্কিত Java entities এর উপর কার্যকরী হয়।


1. JPQL Overview

JPQL হল SQL-এর Object-Oriented version, যা JPA তে entity objects এর উপর কাজ করে, এবং তা ডেটাবেস টেবিলগুলির পরিবর্তে Java objects ব্যবহার করে। JPQL-এ SELECT, UPDATE, DELETE, INSERT এর মতো SQL কোয়েরি কার্যকরী করা যেতে পারে।

JPQL-এর বৈশিষ্ট্য:

  • Entity Objects ব্যবহার করে ডেটাবেস টেবিলের পরিবর্তে।
  • Named queries এবং dynamic queries এর মাধ্যমে JPQL কার্যকরী করা যায়।
  • JPQL এ Join এবং Relationship গুলি খুব সহজেই পরিচালনা করা যায়।
  • No direct reference to tables or columns: JPQL SQL এর মতো টেবিল এবং কলামের পরিবর্তে entities এবং তাদের attributes ব্যবহার করে।

2. JPQL Syntax and Example

Basic JPQL Query Example:

import javax.persistence.*;
import java.util.List;

public class JPQLExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("exampleUnit");
        EntityManager entityManager = entityManagerFactory.createEntityManager();

        try {
            // Start a transaction
            entityManager.getTransaction().begin();

            // JPQL query to select all employees
            Query query = entityManager.createQuery("SELECT e FROM Employee e");

            List<Employee> employees = query.getResultList();

            for (Employee employee : employees) {
                System.out.println(employee.getName());
            }

            // Commit transaction
            entityManager.getTransaction().commit();
        } finally {
            entityManager.close();
            entityManagerFactory.close();
        }
    }
}

Explanation:

  • SELECT e FROM Employee e: এই JPQL query-টি Employee Entity class থেকে সমস্ত employee তথ্য ফিরিয়ে আনবে।
  • e হল alias যা Employee entity কে নির্দেশ করছে।
  • createQuery() method ব্যবহার করা হয়েছে JPQL query তৈরি করার জন্য, যা EntityManager এর মাধ্যমে ডেটাবেসে execute করা হবে।

3. JPQL Query Clauses

JPQL-এ WHERE, JOIN, ORDER BY, GROUP BY ইত্যাদি clauses ব্যবহার করা যায়, যা SQL এর মতো কাজ করে কিন্তু Java objects-এর উপর ভিত্তি করে।

Example 1: WHERE Clause:

Query query = entityManager.createQuery("SELECT e FROM Employee e WHERE e.department = :department");
query.setParameter("department", "IT");
List<Employee> employees = query.getResultList();
  • WHERE ক্লজ ব্যবহার করা হয়েছে যেখান থেকে IT বিভাগের কর্মীদের তথ্য পাওয়া যাবে।

Example 2: JOIN Clause:

Query query = entityManager.createQuery("SELECT e FROM Employee e JOIN e.department d WHERE d.name = :departmentName");
query.setParameter("departmentName", "HR");
List<Employee> employees = query.getResultList();
  • JOIN ব্যবহার করা হয়েছে Employee এবং Department entity এর মধ্যে সম্পর্ক স্থাপন করার জন্য। এখানে e.department হল Many-to-One সম্পর্ক এবং d.name দ্বারা ডিপার্টমেন্টের নাম ফিল্টার করা হয়েছে।

Example 3: ORDER BY Clause:

Query query = entityManager.createQuery("SELECT e FROM Employee e ORDER BY e.salary DESC");
List<Employee> employees = query.getResultList();
  • ORDER BY ক্লজ ব্যবহার করে employee.salary অনুসারে ডেটা সাজানো হয়েছে।

Example 4: GROUP BY Clause:

Query query = entityManager.createQuery("SELECT d.name, COUNT(e) FROM Employee e JOIN e.department d GROUP BY d.name");
List<Object[]> result = query.getResultList();
  • GROUP BY ব্যবহার করে department name অনুযায়ী কর্মচারীদের গণনা করা হয়েছে।

4. JPQL Advanced Features

Named Queries:

  • Named Queries হ'ল predefined JPQL queries, যা Entity class-এ @Query অ্যানোটেশন দ্বারা সংজ্ঞায়িত করা হয়। এগুলি পুনরায় ব্যবহারযোগ্য এবং কোডে একাধিকবার ব্যবহৃত হতে পারে।

Named Query Example:

@Entity
@NamedQuery(name = "Employee.findByDepartment", query = "SELECT e FROM Employee e WHERE e.department = :department")
public class Employee {
    // Fields, constructors, getters, and setters
}

Using Named Query:

Query query = entityManager.createNamedQuery("Employee.findByDepartment");
query.setParameter("department", "IT");
List<Employee> employees = query.getResultList();
  • @NamedQuery ব্যবহার করে আপনি একটি JPQL query একটি নামের সাথে সংজ্ঞায়িত করতে পারেন এবং পরে সেটি পুনরায় ব্যবহার করতে পারেন।

Pagination:

JPQL-এ pagination করতে আপনি setFirstResult() এবং setMaxResults() মেথড ব্যবহার করতে পারেন।

Pagination Example:

Query query = entityManager.createQuery("SELECT e FROM Employee e");
query.setFirstResult(0);  // Start from the first result
query.setMaxResults(10);  // Fetch 10 results only
List<Employee> employees = query.getResultList();

Dynamic Queries:

JPQL-এ ডাইনামিক কোয়েরি তৈরি করতে Criteria API বা QueryBuilder ব্যবহার করা হয়।


5. Hibernate এর সাথে JPQL

Hibernate JPA implementation হওয়ায়, Hibernate-এ JPQL ব্যবহার করা সম্ভব। Hibernate Session এর মাধ্যমে Criteria API অথবা JPQL ব্যবহার করে query execute করা যায়।

Example: Using JPQL in Hibernate:

Session session = sessionFactory.openSession();
session.beginTransaction();

// Using JPQL query
Query query = session.createQuery("SELECT e FROM Employee e WHERE e.salary > :minSalary");
query.setParameter("minSalary", 50000);
List<Employee> employees = query.getResultList();

for (Employee employee : employees) {
    System.out.println(employee.getName() + ": " + employee.getSalary());
}

session.getTransaction().commit();
session.close();

Explanation:

  • Hibernate Session এর মাধ্যমে createQuery() মেথড ব্যবহার করে JPQL query তৈরি করা হয়েছে।
  • query.setParameter() মেথড দ্বারা প্যারামিটার সেট করা হয়েছে।
  • getResultList() মেথডটি query-এর ফলাফল রিটার্ন করে।

6. JPQL vs SQL

FeatureJPQLSQL
SyntaxObject-oriented, uses entities and attributesTable-oriented, uses tables and columns
Query FocusOperates on Java objects (entities)Operates on database tables
JoinsUses Java object relationships (e.g., @ManyToOne)Uses SQL joins with tables
Use CasePreferred for ORM-based applications with entitiesPreferred for direct interaction with the database
PerformanceSlight overhead due to abstractionMore efficient for direct database access

  • JPQL (Java Persistence Query Language) হল SQL-এর object-oriented সংস্করণ যা Hibernate এবং JPA এর মাধ্যমে Java entities-এর উপর কাজ করে। এটি Java objects এবং database tables এর মধ্যে সম্পর্ক নির্ধারণ করতে ব্যবহার করা হয়।
  • Hibernate-এ JPQL ব্যবহার করে আপনি dynamic queries, pagination, named queries, fetch joins, এবং grouping ইত্যাদি কাজ সহজেই করতে পারেন।
  • Named queries এবং Criteria API দ্বারা ডাইনামিক এবং পুনরায় ব্যবহারযোগ্য queries তৈরি করা যায়।
  • JPQL Hibernate-এ performance optimization এবং query customization এর জন্য খুবই কার্যকরী, তবে SQL কমান্ডের মাধ্যমে direct database operations আরো দ্রুত হতে পারে।
Content added By
Promotion

Are you sure to start over?

Loading...