CascadeType এবং FetchType এর ব্যবহার

Relationships Mapping (One-to-One, One-to-Many, Many-to-One, Many-to-Many) - জেপিএ  (JPA) - Java Technologies

314

JPA (Java Persistence API) এর মধ্যে দুটি গুরুত্বপূর্ণ ধারণা হল CascadeType এবং FetchType। এই দুটি কনফিগারেশন ডেটাবেসের সাথে সম্পর্কিত অবজেক্ট এবং তাদের সম্পর্কিত ডেটা ম্যানিপুলেশন এবং লোডিং কন্ট্রোল করার জন্য ব্যবহৃত হয়।

CascadeType


CascadeType হল একটি কনফিগারেশন যা Entity সম্পর্কিত অন্য Entity গুলির ওপর CRUD (Create, Read, Update, Delete) অপারেশনগুলিকে ক্যাসকেড (propagate) করতে সহায়তা করে। যখন আপনি একটি Parent Entity-এর ওপর অপারেশন (যেমন, persist, merge, remove) করেন, তখন সম্পর্কিত Child Entity গুলিতে ঐ অপারেশনগুলো ক্যাসকেড হয়ে যাবে।

CascadeType এর প্রকার:

  1. CascadeType.PERSIST: Parent Entity কে persist করলে, সম্পর্কিত Child Entity গুলিও persist হবে।
  2. CascadeType.MERGE: Parent Entity কে merge করলে, সম্পর্কিত Child Entity গুলিও merge হবে।
  3. CascadeType.REMOVE: Parent Entity কে remove করলে, সম্পর্কিত Child Entity গুলিও remove হবে।
  4. CascadeType.REFRESH: Parent Entity কে refresh করলে, সম্পর্কিত Child Entity গুলিও refresh হবে।
  5. CascadeType.DETACH: Parent Entity কে detach করলে, সম্পর্কিত Child Entity গুলিও detach হবে।
  6. CascadeType.ALL: সব CascadeType গুলি একসাথে কার্যকরী হবে।

CascadeType এর উদাহরণ:

ধরা যাক, দুটি Entity ক্লাস Department এবং Employee রয়েছে যেখানে Department হল Parent Entity এবং Employee হল Child Entity।

import javax.persistence.*;

@Entity
public class Department {

    @Id
    private int id;
    private String name;

    @OneToMany(cascade = CascadeType.ALL)
    private List<Employee> employees;

    // Getters and Setters
}

@Entity
public class Employee {

    @Id
    private int id;
    private String name;

    // Getters and Setters
}

এখানে:

  • @OneToMany(cascade = CascadeType.ALL) এর মাধ্যমে Department Entity তে করা অপারেশনগুলো Employee Entity তে ক্যাসকেড হয়ে যাবে।
  • উদাহরণস্বরূপ, যদি একটি Department Entity তৈরি করা হয়, তবে এর সাথে সম্পর্কিত সব Employee Entity গুলোও একই সঙ্গে persist হবে, এবং যদি Department Entity মুছে ফেলা হয়, তবে তার সাথে সম্পর্কিত সব Employee Entity গুলোও মুছে ফেলা হবে।

FetchType


FetchType হল একটি কনফিগারেশন যা JPA-তে Entity গুলোর লোডিং স্ট্র্যাটেজি কন্ট্রোল করে। FetchType দুটি প্রকারের হতে পারে:

  1. FetchType.EAGER: এটি সম্পর্কিত Entity গুলিকে সাথে সাথে লোড করে যখন Parent Entity লোড হয়।
  2. FetchType.LAZY: এটি সম্পর্কিত Entity গুলিকে ডেম্যান্ডে লোড করে, অর্থাৎ Parent Entity লোড হওয়ার পর শুধুমাত্র যখন প্রয়োজন হবে তখন সম্পর্কিত Entity গুলো লোড হবে।

FetchType এর উদাহরণ:

ধরা যাক, দুটি Entity ক্লাস Student এবং Course রয়েছে, যেখানে একজন Student একাধিক Course নিবন্ধন করতে পারে। আমরা চাই, যখন একটি Student লোড হবে তখন তার সাথে সম্পর্কিত Course গুলো Lazyভাবে লোড হোক।

import javax.persistence.*;

@Entity
public class Student {

    @Id
    private int id;
    private String name;

    @OneToMany(fetch = FetchType.LAZY)
    private List<Course> courses;

    // Getters and Setters
}

@Entity
public class Course {

    @Id
    private int id;
    private String courseName;

    // Getters and Setters
}

এখানে:

  • @OneToMany(fetch = FetchType.LAZY) দ্বারা Course Entity গুলো Lazy লোড করা হয়েছে। এর মানে, যখন Student Entity লোড হবে, তখন Course Entity গুলো শুধুমাত্র তখনই লোড হবে যখন courses প্রপার্টি অ্যাক্সেস করা হবে।

FetchType.EAGER উদাহরণ:

@Entity
public class Student {

    @Id
    private int id;
    private String name;

    @OneToMany(fetch = FetchType.EAGER)
    private List<Course> courses;

    // Getters and Setters
}

এখানে:

  • @OneToMany(fetch = FetchType.EAGER) দ্বারা Course Entity গুলো Eagerly লোড হবে, অর্থাৎ যখন Student Entity লোড হবে তখন সাথে সাথে Course Entity গুলোও লোড হবে।

CascadeType এবং FetchType এর পার্থক্য


  • CascadeType ডেটাবেসের ওপর বিভিন্ন CRUD অপারেশনগুলিকে ক্যাসকেড করতে ব্যবহৃত হয়, অর্থাৎ Parent Entity-তে কোনো অপারেশন করলে তা Child Entity-তে প্রভাব ফেলবে।
  • FetchType ডেটাবেস থেকে সম্পর্কিত Entity গুলির লোডিং স্ট্র্যাটেজি নিয়ন্ত্রণ করে। এটি নির্ধারণ করে যে, সম্পর্কিত Entity গুলো ডেটাবেস থেকে লোড করা হবে কখন এবং কীভাবে।

সারাংশ


CascadeType এবং FetchType JPA এর গুরুত্বপূর্ণ কনসেপ্ট যা ডেটাবেস ম্যানিপুলেশন এবং Entity গুলোর লোডিং কৌশলকে কন্ট্রোল করে। CascadeType ব্যবহার করে Parent Entity-তে করা অপারেশন গুলো Child Entity তে ক্যাসকেড করা যায়, এবং FetchType ব্যবহার করে সম্পর্কিত Entity গুলোকে Lazy বা Eagerly লোড করা যায়। এই কনসেপ্টগুলো JPA এর কার্যকারিতা এবং পারফরম্যান্সের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডেটাবেস অপারেশনগুলোকে আরও কার্যকরী এবং নমনীয় করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...