JPA (Java Persistence API) রিলেশনাল ডেটাবেস এবং জাভা অবজেক্টের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Bidirectional এবং Unidirectional সম্পর্ক হল Entity ক্লাসগুলির মধ্যে সম্পর্কের দুইটি গুরুত্বপূর্ণ ধারণা, যা জেভিএএ (JPA) ডাটাবেসের মধ্যে ডেটার অর্গানাইজেশন ও ম্যানিপুলেশনে সহায়তা করে।
এই সম্পর্কগুলি One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many রিলেশনশিপে প্রযোজ্য হয় এবং ডেটাবেসে টেবিলগুলির মধ্যে সম্পর্কের আর্কিটেকচার তৈরি করে।
Unidirectional Relationship
Unidirectional Relationship হলো এমন একটি সম্পর্ক যেখানে এক Entity থেকে অন্য Entity এর সাথে সম্পর্ক স্থাপন করা হয়, কিন্তু বিপরীত দিকে সম্পর্ক করা হয় না। অর্থাৎ, একটি Entity তার সম্পর্কিত Entity এর দিকে ইঙ্গিত করে, কিন্তু সেই Entity তার প্রথম Entity তে ফিরে আসার কোনো তথ্য রাখে না।
Unidirectional One-to-Many Relationship
এটি এমন একটি সম্পর্ক যেখানে একটি Entity এর অনেকগুলি সম্পর্কিত Entity থাকতে পারে, কিন্তু বিপরীত দিকে কোন সম্পর্ক নেই।
উদাহরণ: একে অনেকের সম্পর্ক (One-to-Many) - একটি ডিপার্টমেন্টে অনেক কর্মচারী থাকতে পারে, কিন্তু কর্মচারী জানবে না যে কোন ডিপার্টমেন্টে তারা কাজ করছে।
import javax.persistence.*;
@Entity
public class Department {
@Id
private Long id;
private String name;
@OneToMany
private List<Employee> employees;
// Getters and Setters
}
@Entity
public class Employee {
@Id
private Long id;
private String name;
// No reference to Department
}
এখানে:
- Department Entity এর মধ্যে
@OneToManyঅ্যানোটেশন ব্যবহার করা হয়েছে, যা নির্দেশ করে যে একটি ডিপার্টমেন্টে অনেক কর্মচারী থাকতে পারে। - Employee Entity তে কোনো Department অবজেক্ট নেই, অর্থাৎ এটি unidirectional।
Bidirectional Relationship
Bidirectional Relationship হলো এমন একটি সম্পর্ক যেখানে দুটি Entity একে অপরের দিকে সম্পর্ক স্থাপন করতে পারে। অর্থাৎ, একটি Entity অন্য Entity এর দিকে নির্দেশনা প্রদান করে, এবং বিপরীত দিকে সেই Entity দ্বিতীয় Entity এর দিকে নির্দেশনা প্রদান করতে পারে।
Bidirectional One-to-Many Relationship
এটি এমন একটি সম্পর্ক যেখানে একটি Entity এর অনেকগুলি সম্পর্কিত Entity থাকতে পারে এবং প্রতিটি সম্পর্কিত Entity তার মূল Entity এর দিকে ইঙ্গিত করে।
উদাহরণ: একে অনেকের সম্পর্ক (One-to-Many) - একটি ডিপার্টমেন্টের অনেক কর্মচারী থাকতে পারে, এবং প্রতিটি কর্মচারী জানবে তার কোন ডিপার্টমেন্টে কাজ করছে।
import javax.persistence.*;
@Entity
public class Department {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
// Getters and Setters
}
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
// Getters and Setters
}
এখানে:
- Department Entity তে
@OneToMany(mappedBy = "department")দ্বারা কর্মচারীদের সাথে সম্পর্ক স্থাপন করা হয়েছে, যেখানেmappedByএর মাধ্যমে এটি Employee Entity এরdepartmentফিল্ড দ্বারা সম্পর্কিত। - Employee Entity তে
@ManyToOneঅ্যানোটেশন ব্যবহার করা হয়েছে, যেখানে কর্মচারী তাদের ডিপার্টমেন্টের দিকে ইঙ্গিত করে।
Bidirectional Many-to-Many Relationship
এটি এমন একটি সম্পর্ক যেখানে দুটি Entity একে অপরের মধ্যে অনেকগুলি সম্পর্ক স্থাপন করতে পারে।
উদাহরণ: অনেকের মধ্যে অনেকের সম্পর্ক (Many-to-Many) - একজন শিক্ষার্থী অনেক কোর্সে পড়তে পারে এবং একটি কোর্সে অনেক শিক্ষার্থী থাকতে পারে।
import javax.persistence.*;
import java.util.List;
@Entity
public class Student {
@Id
private Long id;
private String name;
@ManyToMany(mappedBy = "students")
private List<Course> courses;
// Getters and Setters
}
@Entity
public class Course {
@Id
private Long id;
private String title;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "course_id"),
inverseJoinColumns = @JoinColumn(name = "student_id")
)
private List<Student> students;
// Getters and Setters
}
এখানে:
- Student Entity তে
@ManyToMany(mappedBy = "students")ব্যবহার করে কোর্সের সাথে সম্পর্ক তৈরি হয়েছে, যেখানেmappedByএর মাধ্যমে এটি Course Entity এরstudentsফিল্ড দ্বারা সম্পর্কিত। - Course Entity তে
@ManyToManyএবং@JoinTableব্যবহার করে শিক্ষার্থীদের সাথে সম্পর্ক তৈরি করা হয়েছে।@JoinTableটেবিলটি সম্পর্কিত কলামগুলোকে সংজ্ঞায়িত করে।
Unidirectional এবং Bidirectional Relationship এর মধ্যে পার্থক্য
| Concept | Unidirectional Relationship | Bidirectional Relationship |
|---|---|---|
| Relationship Type | এক Entity অন্য Entity এর দিকে সম্পর্ক স্থাপন করে, কিন্তু বিপরীত দিকে কোনো সম্পর্ক নেই। | দুটি Entity একে অপরের দিকে সম্পর্ক স্থাপন করতে পারে। |
| Data Mapping | এক Entity সম্পর্কিত Entity গুলোর তথ্য জানে, কিন্তু বিপরীত দিকে কোনো তথ্য নেই। | দুটি Entity একে অপরের সম্পর্কিত তথ্য জানে। |
| Example | One-to-Many (Department -> Employees) | One-to-Many (Department <- Employees) |
| Performance | কিছুটা দ্রুত কারণ একটি Entity শুধুমাত্র এক Entity এর দিকে ইঙ্গিত করে। | অতিরিক্ত সম্পর্ক এবং ডেটা ম্যানিপুলেশনের কারণে একটু ধীর হতে পারে। |
সারাংশ
JPA এ Unidirectional এবং Bidirectional সম্পর্ক দুটি Entity ক্লাসের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। Unidirectional Relationship হল একটি সম্পর্ক যেখানে একটি Entity অন্য Entity এর সাথে সম্পর্ক স্থাপন করে, কিন্তু বিপরীত দিকে কোনো সম্পর্ক নেই। অপরদিকে, Bidirectional Relationship হল একটি সম্পর্ক যেখানে দুটি Entity একে অপরের সাথে সম্পর্ক স্থাপন করতে পারে এবং ডেটাবেসে সম্পর্কিত টেবিলগুলির মধ্যে যোগাযোগ তৈরি করে। JPA এর মাধ্যমে আমরা One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্ক স্থাপন করতে পারি, এবং এই সম্পর্কের মধ্যে Unidirectional বা Bidirectional সেটআপ করা যায়।
Read more