Sorting এর জন্য Order By ব্যবহার করা

Pagination এবং Sorting - জেপিএ  (JPA) - Java Technologies

349

JPA (Java Persistence API)-তে sorting বা অর্ডারিং খুবই গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি ডেটাবেস থেকে ডেটা রিটার্ন করছেন এবং সেই ডেটা একটি নির্দিষ্ট কৃতক্রমে (order) সাজাতে চান। @OrderBy অ্যানোটেশনটি JPA-তে ব্যবহৃত হয় Entity Relationship এর মাধ্যমে ডেটা সাজানোর জন্য, যখন আপনি একটি Collection বা List এর মধ্যে সম্পর্কিত ডেটা সাজাতে চান।

এই অ্যানোটেশনটি এক বা একাধিক প্রপার্টির ভিত্তিতে ডেটা সাজানোর জন্য ব্যবহৃত হয়।


@OrderBy অ্যানোটেশন

@OrderBy অ্যানোটেশনটি JPA-তে Collection বা List এর মধ্যে রিলেটেড Entity গুলোর সাজানোর জন্য ব্যবহৃত হয়। এটি মূলত JPA Relationship Mapping এর অংশ হিসেবে ব্যবহৃত হয় এবং Entity-এর প্রপার্টি অনুযায়ী ascending বা descending অর্ডারে ডেটা রিটার্ন করে।

@OrderBy Syntax:

@OrderBy("propertyName ASC|DESC")
  • propertyName: এটি সেই প্রপার্টি যা আপনি সাজাতে চান।
  • ASC: ascending order (ছোট থেকে বড়)
  • DESC: descending order (বড় থেকে ছোট)

@OrderBy উদাহরণ

ধরা যাক, দুটি Entity ক্লাস Department এবং Employee রয়েছে, যেখানে একটি Department Entity এর সাথে একাধিক Employee Entity সম্পর্কিত থাকে। আমরা চাই যে, কর্মচারীদের নাম অনুযায়ী (ascending order) সাজাতে।

Department Entity:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import java.util.List;

@Entity
public class Department {
    
    @Id
    private Long id;
    private String name;

    @OneToMany(mappedBy = "department")
    @OrderBy("name ASC") // Sorting employees by name in ascending order
    private List<Employee> employees;

    // Getters and Setters
}

Employee Entity:

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

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;

    @ManyToOne
    private Department department;

    // Getters and Setters
}

এখানে:

  • Department Entity তে @OneToMany সম্পর্কের মাধ্যমে Employee Entity গুলির মধ্যে সম্পর্ক স্থাপন করা হয়েছে।
  • @OrderBy("name ASC"): এটি Employee এর name প্রপার্টি অনুযায়ী সাজানোর জন্য ব্যবহৃত হচ্ছে।

এখন, যখন আপনি Department Entity এর সাথে সম্পর্কিত Employee গুলির তালিকা বের করবেন, তা কর্মচারীদের নাম অনুযায়ী ascending order তে সাজানো থাকবে।

নোট:

  • @OrderBy অ্যানোটেশনটি শুধুমাত্র Collection বা List প্রপার্টির উপর ব্যবহৃত হয়।
  • এটি শুধু related Entity এর উপরে প্রভাব ফেলবে, অর্থাৎ @OneToMany, @ManyToMany সম্পর্কিত ক্ষেত্রে কার্যকরী হবে।

JPQL (Java Persistence Query Language) এ Sorting

আপনি যদি JPQL ব্যবহার করে কাস্টম কুয়েরি করতে চান এবং ডেটা সাজাতে চান, তবে ORDER BY ক্লজ ব্যবহার করতে পারেন। এটি SQL এর মতো কাজ করে এবং JPA-তে Entity ক্লাসের প্রপার্টি অনুযায়ী সাজানোর সুবিধা দেয়।

JPQL উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.List;

public class EmployeeService {

    private EntityManager entityManager;

    public List<Employee> getEmployeesByDepartmentSorted(Long departmentId) {
        String jpql = "SELECT e FROM Employee e WHERE e.department.id = :departmentId ORDER BY e.name ASC";
        TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class);
        query.setParameter("departmentId", departmentId);
        return query.getResultList();
    }
}

এখানে:

  • JPQL কুয়েরি ব্যবহার করে Employee Entity-কে name প্রপার্টি অনুযায়ী ascending order তে সাজানো হচ্ছে।

Sorting on Multiple Fields (একাধিক ফিল্ডে Sorting)

আপনি একাধিক ফিল্ডের ওপরও ডেটা সাজাতে পারেন। একাধিক প্রপার্টি সাজানোর জন্য @OrderBy বা JPQL উভয় ক্ষেত্রেই কমা দিয়ে প্রপার্টি নাম আলাদা করতে হবে।

@OrderBy এর মাধ্যমে একাধিক প্রপার্টি Sorting:

@OrderBy("name ASC, id DESC")
private List<Employee> employees;

এখানে:

  • name প্রপার্টি ascending order তে এবং id প্রপার্টি descending order তে সাজানো হচ্ছে।

JPQL এর মাধ্যমে একাধিক প্রপার্টি Sorting:

String jpql = "SELECT e FROM Employee e ORDER BY e.name ASC, e.id DESC";

এখানে:

  • name প্রপার্টি ascending এবং id প্রপার্টি descending order তে সাজানো হচ্ছে।

Sorting Performance and Best Practices

  1. Database Level Sorting: যখন আপনি JPA বা JPQL এর মাধ্যমে ডেটা সাজান, তখন সেটি ডেটাবেসে SQL ORDER BY ক্লজ হিসেবে রূপান্তরিত হয়। তাই অনেক রেকর্ডের সাথে কাজ করার সময় ডেটাবেসের পারফরম্যান্স নিশ্চিত করতে indexing ব্যবহার করুন।
  2. Avoid Large Fetches: যখন আপনি অনেক রেকর্ড ফেচ করেন এবং Sorting করেন, তখন Lazy Loading এবং FetchSize কনফিগারেশন ব্যবহার করুন যাতে একসাথে খুব বেশি রেকর্ড লোড না হয়।
  3. JPA Level Sorting: @OrderBy অ্যানোটেশনটি Collection বা List এর মধ্যে সম্পর্কিত Entity গুলো সজ্জিত করতে ব্যবহৃত হয়, তবে এটি memory-এ সাজানো হয়। যদি খুব বড় Collection থাকে, তবে ডেটাবেসে ORDER BY ব্যবহার করা ভালো।

সারাংশ


JPA তে @OrderBy অ্যানোটেশন এবং JPQL উভয়ই ডেটাবেস থেকে ডেটা সাজানোর জন্য ব্যবহার করা হয়। @OrderBy অ্যানোটেশনটি One-to-Many, Many-to-One, বা Many-to-Many সম্পর্কিত Entity গুলোর মধ্যে সাজানোর জন্য ব্যবহৃত হয়, এবং JPQL ডেটা সাজাতে ORDER BY ক্লজ ব্যবহার করে। একাধিক ফিল্ডে Sorting এবং Cascade Sorting করা সম্ভব, যা ডেটাবেস ম্যানিপুলেশন এবং পারফরম্যান্স উন্নত করতে সহায়তা করে।

Content added By
Promotion

Are you sure to start over?

Loading...