উদাহরণ সহ Lazy এবং Eager Loading এর ব্যবহার

Hibernate এর Lazy Loading এবং Eager Loading - স্প্রিং ওআরএম (Spring ORM) - Java Technologies

286

Lazy এবং Eager Loading হল ডেটাবেস থেকে ডেটা লোড করার প্রক্রিয়ার ভিন্ন ভিন্ন কৌশল। এগুলো Hibernate বা JPA ব্যবহার করে ডেটাবেসের সম্পর্কিত (associations) ডেটা লোড করার ধরন নিয়ন্ত্রণ করে।


Lazy Loading

Lazy Loading একটি ডেটাবেস সম্পর্ক লোড করার প্রক্রিয়া, যেখানে প্রাথমিকভাবে শুধুমাত্র মেইন (primary) ডেটা লোড করা হয় এবং অ্যাসোসিয়েটেড ডেটা তখনই লোড হয় যখন সেটি প্রথমবার অ্যাক্সেস করা হয়।

বৈশিষ্ট্য:

  • মেমরি ব্যবহার কম হয়।
  • ডেটা লোডিংয়ের পারফরম্যান্স বেশি।
  • অ্যাসোসিয়েটেড ডেটা প্রয়োজন না হলে এটি লোড হয় না।

Hibernate অ্যানোটেশন:

@OneToMany(fetch = FetchType.LAZY)

Eager Loading

Eager Loading একটি ডেটাবেস সম্পর্ক লোড করার প্রক্রিয়া, যেখানে মেইন ডেটার সঙ্গে সমস্ত অ্যাসোসিয়েটেড ডেটা প্রাথমিকভাবেই লোড করা হয়।

বৈশিষ্ট্য:

  • লোডিং প্রক্রিয়া তুলনামূলক ধীর।
  • অ্যাসোসিয়েটেড ডেটা সঙ্গে সঙ্গেই অ্যাক্সেস করা যায়।
  • বড় ডেটাসেটের ক্ষেত্রে অপ্রয়োজনীয় মেমরি ব্যবহারের সম্ভাবনা থাকে।

Hibernate অ্যানোটেশন:

@OneToMany(fetch = FetchType.EAGER)

উদাহরণ: Lazy এবং Eager Loading

Entity: Department এবং Employee

Department Entity

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

@Entity
@Table(name = "departments")
public class Department {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @OneToMany(mappedBy = "department", fetch = FetchType.LAZY)
    private List<Employee> employees;

    // Getters and Setters
}

Employee Entity

import jakarta.persistence.*;

@Entity
@Table(name = "employees")
public class Employee {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @ManyToOne
    @JoinColumn(name = "department_id")
    private Department department;

    // Getters and Setters
}

Lazy Loading উদাহরণ

Lazy লোডিং কনফিগারেশনে Department ক্লাসের employees সম্পর্ক শুধুমাত্র তখনই লোড হবে যখন getEmployees() মেথড কল করা হবে।

Lazy Loading Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/departments")
public class DepartmentController {

    @Autowired
    private DepartmentRepository departmentRepository;

    @GetMapping("/{id}")
    public Department getDepartment(@PathVariable Long id) {
        Department department = departmentRepository.findById(id).orElse(null);
        // Lazy Loading: Employees data will load only when getEmployees() is called
        if (department != null) {
            System.out.println(department.getEmployees());
        }
        return department;
    }
}

Eager Loading উদাহরণ

Eager লোডিং কনফিগারেশনে employees সম্পর্ক ডিপার্টমেন্ট লোড করার সময় সঙ্গে সঙ্গেই লোড হয়ে যাবে।

Eager Loading কনফিগারেশন

@OneToMany(mappedBy = "department", fetch = FetchType.EAGER)
private List<Employee> employees;

Eager Loading Controller

@RestController
@RequestMapping("/departments")
public class DepartmentController {

    @Autowired
    private DepartmentRepository departmentRepository;

    @GetMapping("/{id}")
    public Department getDepartment(@PathVariable Long id) {
        Department department = departmentRepository.findById(id).orElse(null);
        // Eager Loading: Employees data is already loaded with the department
        return department;
    }
}

Lazy এবং Eager Loading এর পার্থক্য

বৈশিষ্ট্যLazy LoadingEager Loading
লোডিং টাইমঅ্যাসোসিয়েটেড ডেটা প্রথমবার অ্যাক্সেস করার সময় লোড হয়।মেইন ডেটার সঙ্গে সঙ্গে অ্যাসোসিয়েটেড ডেটা লোড হয়।
পারফরম্যান্সমেমরি কম ব্যবহৃত হয়।বেশি মেমরি ব্যবহৃত হয়।
ব্যবহার উপযুক্ততাযখন অ্যাসোসিয়েটেড ডেটা সবসময় প্রয়োজন হয় না।যখন অ্যাসোসিয়েটেড ডেটা সবসময় প্রয়োজন।

Lazy এবং Eager Loading এর সঠিক ব্যবহারের মাধ্যমে ডেটাবেস অপারেশন আরও কার্যকর এবং মেমরি ব্যবহারে দক্ষ করে তোলা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...