JPA (Java Persistence API) একটি ORM (Object-Relational Mapping) প্রযুক্তি যা Java ক্লাসগুলিকে ডেটাবেস টেবিলের সাথে সম্পর্কিত করতে সহায়তা করে। JPA-তে বিভিন্ন ধরনের সম্পর্ক প্রতিষ্ঠা করার জন্য অ্যানোটেশন ব্যবহৃত হয়। এগুলি @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany সম্পর্কের জন্য ব্যবহৃত অ্যানোটেশন।
এগুলির মাধ্যমে একটি অ্যাপ্লিকেশন ডেটাবেসে একাধিক টেবিলের মধ্যে সম্পর্ক স্থাপন করতে পারে। নিচে এই অ্যানোটেশনগুলির বিস্তারিত আলোচনা করা হলো।
১. @OneToOne (একটির সাথে একটির সম্পর্ক)
@OneToOne এনোটেশনটি ব্যবহার করা হয় যখন দুটি Entity এর মধ্যে একটির সাথে একটির সম্পর্ক থাকে। অর্থাৎ, একটি Entity অন্য একটি Entity এর সাথে সম্পর্কিত এবং সেই Entity একটি মাত্র রেকর্ডের সাথে সম্পর্কিত থাকে।
@OneToOne উদাহরণ:
ধরা যাক, একটি Person এবং একটি Passport Entity রয়েছে, যেখানে একজন ব্যক্তি শুধুমাত্র একটি পাসপোর্ট রাখবে এবং একটি পাসপোর্ট শুধুমাত্র একটি ব্যক্তির সাথে সম্পর্কিত থাকবে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Person {
@Id
private Long id;
private String name;
@OneToOne
private Passport passport; // One-to-One Relationship
// Getters and Setters
}
@Entity
public class Passport {
@Id
private Long passportId;
private String passportNumber;
@OneToOne(mappedBy = "passport")
private Person person; // Inverse Side of the relationship
// Getters and Setters
}
Explanation:
- @OneToOne: এখানে
PersonEntity-এPassportEntity এর সাথে একটির সাথে একটির সম্পর্ক স্থাপন করা হয়েছে। - mappedBy:
PassportEntity-তেmappedByব্যবহার করা হয়েছে, যা সম্পর্কের ইনভার্স সাইড নির্ধারণ করে।
২. @OneToMany (একটির সাথে অনেকগুলোর সম্পর্ক)
@OneToMany এনোটেশনটি ব্যবহার করা হয় যখন একটি Entity অনেকগুলো Entity এর সাথে সম্পর্কিত থাকে। এটি সাধারণত একটি Entity দ্বারা অনেকগুলি Entity রেকর্ডের মালিকানা প্রকাশ করে।
@OneToMany উদাহরণ:
ধরা যাক, একটি Department এবং অনেক Employee Entity রয়েছে, যেখানে একটি Department অনেক Employee এর সাথে সম্পর্কিত থাকবে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Department {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees; // One-to-Many Relationship
// Getters and Setters
}
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
private Department department; // Many-to-One Relationship
// Getters and Setters
}
Explanation:
- @OneToMany:
DepartmentEntity-এEmployeeEntity এর সাথে একটির সাথে অনেকগুলোর সম্পর্ক স্থাপন করা হয়েছে। - mappedBy:
EmployeeEntity-তেdepartmentফিল্ডটি সম্পর্কের মালিকানা ধারণ করে।
৩. @ManyToOne (অনেকগুলোর সাথে একটির সম্পর্ক)
@ManyToOne এনোটেশনটি ব্যবহার করা হয় যখন একটি Entity অনেকগুলোর সাথে সম্পর্কিত থাকে এবং সম্পর্কের মালিকানা অনেকগুলি Entity ধারণ করে, কিন্তু সেই Entity একটি রেকর্ডের সাথে সম্পর্কিত থাকে।
@ManyToOne উদাহরণ:
ধরা যাক, একাধিক Employee একটি Department এর সাথে সম্পর্কিত থাকবে।
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; // Many-to-One Relationship
// Getters and Setters
}
Explanation:
- @ManyToOne:
EmployeeEntity-এDepartmentEntity এর সাথে অনেকগুলোর সাথে একটির সম্পর্ক স্থাপন করা হয়েছে। - এখানে, অনেক Employee একটি Department এর সাথে সম্পর্কিত।
৪. @ManyToMany (অনেকগুলোর সাথে অনেকগুলোর সম্পর্ক)
@ManyToMany এনোটেশনটি ব্যবহার করা হয় যখন দুটি Entity এর মধ্যে অনেকগুলোর সাথে অনেকগুলোর সম্পর্ক থাকে। অর্থাৎ, একটি Entity অনেকগুলি অন্য Entity এর সাথে সম্পর্কিত এবং সেই Entity এরাও অনেকগুলো Entity এর সাথে সম্পর্কিত থাকে।
@ManyToMany উদাহরণ:
ধরা যাক, একটি Student এবং একটি Course Entity রয়েছে, যেখানে একটি Student অনেকগুলি Course নিবন্ধন করতে পারে এবং একটি Course অনেকগুলি Student নিতে পারে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import java.util.List;
@Entity
public class Student {
@Id
private Long id;
private String name;
@ManyToMany
private List<Course> courses; // Many-to-Many Relationship
// Getters and Setters
}
@Entity
public class Course {
@Id
private Long id;
private String courseName;
@ManyToMany(mappedBy = "courses")
private List<Student> students; // Inverse Side of the relationship
// Getters and Setters
}
Explanation:
- @ManyToMany:
StudentEntity-এCourseEntity এর সাথে অনেকগুলোর সাথে অনেকগুলোর সম্পর্ক স্থাপন করা হয়েছে। - mappedBy:
CourseEntity-তেmappedByব্যবহার করা হয়েছে, যা সম্পর্কের ইনভার্স সাইড নির্ধারণ করে।
সারাংশ
JPA (Java Persistence API)-তে @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany অ্যানোটেশনগুলি ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে ব্যবহৃত হয়। এগুলি ডেটাবেসে সম্পর্কিত টেবিলের মধ্যে সম্পর্ক এবং একাধিক অবজেক্টকে সংজ্ঞায়িত করার জন্য ব্যবহৃত হয়:
- @OneToOne: একটি Entity এবং আরেকটি Entity এর মধ্যে একটির সাথে একটির সম্পর্ক।
- @OneToMany: একটি Entity এবং অনেক Entity এর মধ্যে একটির সাথে অনেকগুলোর সম্পর্ক।
- @ManyToOne: অনেক Entity এবং একটি Entity এর মধ্যে অনেকগুলোর সাথে একটির সম্পর্ক।
- @ManyToMany: অনেক Entity এবং অনেক Entity এর মধ্যে অনেকগুলোর সাথে অনেকগুলোর সম্পর্ক।
এই অ্যানোটেশনগুলো JPA এবং ORM ডেভেলপমেন্টের গুরুত্বপূর্ণ অংশ হিসেবে কাজ করে এবং ডেটাবেস সম্পর্কের নকশা তৈরি করতে সাহায্য করে।
Read more