JPA (Java Persistence API) এর মধ্যে দুটি গুরুত্বপূর্ণ ধারণা হল CascadeType এবং FetchType। এই দুটি কনফিগারেশন ডেটাবেসের সাথে সম্পর্কিত অবজেক্ট এবং তাদের সম্পর্কিত ডেটা ম্যানিপুলেশন এবং লোডিং কন্ট্রোল করার জন্য ব্যবহৃত হয়।
CascadeType
CascadeType হল একটি কনফিগারেশন যা Entity সম্পর্কিত অন্য Entity গুলির ওপর CRUD (Create, Read, Update, Delete) অপারেশনগুলিকে ক্যাসকেড (propagate) করতে সহায়তা করে। যখন আপনি একটি Parent Entity-এর ওপর অপারেশন (যেমন, persist, merge, remove) করেন, তখন সম্পর্কিত Child Entity গুলিতে ঐ অপারেশনগুলো ক্যাসকেড হয়ে যাবে।
CascadeType এর প্রকার:
- CascadeType.PERSIST: Parent Entity কে persist করলে, সম্পর্কিত Child Entity গুলিও persist হবে।
- CascadeType.MERGE: Parent Entity কে merge করলে, সম্পর্কিত Child Entity গুলিও merge হবে।
- CascadeType.REMOVE: Parent Entity কে remove করলে, সম্পর্কিত Child Entity গুলিও remove হবে।
- CascadeType.REFRESH: Parent Entity কে refresh করলে, সম্পর্কিত Child Entity গুলিও refresh হবে।
- CascadeType.DETACH: Parent Entity কে detach করলে, সম্পর্কিত Child Entity গুলিও detach হবে।
- 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 তে ক্যাসকেড হয়ে যাবে।- উদাহরণস্বরূপ, যদি একটি
DepartmentEntity তৈরি করা হয়, তবে এর সাথে সম্পর্কিত সবEmployeeEntity গুলোও একই সঙ্গে persist হবে, এবং যদিDepartmentEntity মুছে ফেলা হয়, তবে তার সাথে সম্পর্কিত সবEmployeeEntity গুলোও মুছে ফেলা হবে।
FetchType
FetchType হল একটি কনফিগারেশন যা JPA-তে Entity গুলোর লোডিং স্ট্র্যাটেজি কন্ট্রোল করে। FetchType দুটি প্রকারের হতে পারে:
- FetchType.EAGER: এটি সম্পর্কিত Entity গুলিকে সাথে সাথে লোড করে যখন Parent Entity লোড হয়।
- 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 লোড করা হয়েছে। এর মানে, যখনStudentEntity লোড হবে, তখনCourseEntity গুলো শুধুমাত্র তখনই লোড হবে যখন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 লোড হবে, অর্থাৎ যখনStudentEntity লোড হবে তখন সাথে সাথেCourseEntity গুলোও লোড হবে।
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 এর কার্যকারিতা এবং পারফরম্যান্সের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে এবং ডেটাবেস অপারেশনগুলোকে আরও কার্যকরী এবং নমনীয় করে তোলে।
Read more