Hibernate Mapping হল Object-Relational Mapping (ORM) প্রযুক্তির একটি গুরুত্বপূর্ণ অংশ, যা Java অবজেক্টগুলিকে ডেটাবেস টেবিলের সাথে সম্পর্কিত করে। Hibernate, JPA (Java Persistence API) এর মাধ্যমে ডেটাবেস টেবিল এবং Java ক্লাসের মধ্যে সম্পর্ক স্থাপন করতে সহায়তা করে।
Hibernate Mapping নিশ্চিত করে যে, Java অবজেক্টের ডেটা ডেটাবেস টেবিলের সঠিক কনফিগারেশনের মাধ্যমে সংরক্ষিত হয় এবং ডেটাবেসের ডেটা Java অবজেক্টে পরিবর্তিত হয়। এই প্রক্রিয়াটি খুবই স্বয়ংক্রিয় এবং ডেটাবেসের সাথে যোগাযোগ সহজ ও মডুলার করে তোলে।
Hibernate Mapping Types
Hibernate Mapping-এর তিনটি প্রধান প্রকার রয়েছে:
- One-to-One Mapping
- One-to-Many / Many-to-One Mapping
- Many-to-Many Mapping
এছাড়াও, Hibernate ম্যানিপুলেশন এর জন্য Inheritance Mapping এবং Component Mapping রয়েছে, যা জটিল ডেটাবেস সম্পর্ক এবং অবজেক্ট মডেলকে আরো কার্যকরীভাবে ম্যানেজ করতে সাহায্য করে।
1. One-to-One Mapping
One-to-One Mapping হল এমন একটি সম্পর্ক যেখানে একটি টেবিলের একটি রেকর্ড অন্য একটি টেবিলের একটি রেকর্ডের সাথে সম্পর্কিত থাকে। Hibernate-এ এটি কিভাবে ম্যানেজ করা যায় তা নিচে দেখানো হয়েছে।
One-to-One Mapping Example
ধরা যাক, আমাদের দুটি ক্লাস আছে: Person এবং Passport। একটি Person এর একটি একক Passport থাকতে পারে।
Java Classes
@Entity
@Table(name = "person")
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToOne
@JoinColumn(name = "passport_id")
private Passport passport;
// Getters and Setters
}
@Entity
@Table(name = "passport")
public class Passport {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String passportNumber;
// Getters and Setters
}
এখানে, @OneToOne অ্যানোটেশনটি বলে দেয় যে Person এবং Passport টেবিলগুলির মধ্যে এক-থেকে-এক সম্পর্ক রয়েছে। @JoinColumn দ্বারা, আমরা passport_id কলামকে Person টেবিলের সাথে যুক্ত করি।
2. One-to-Many / Many-to-One Mapping
One-to-Many এবং Many-to-One সম্পর্ক একে অপরের বিপরীত। একটি One-to-Many সম্পর্কের মধ্যে একটি টেবিলের একটি রেকর্ড অনেক রেকর্ডের সাথে সম্পর্কিত থাকতে পারে, এবং Many-to-One সম্পর্কের মধ্যে অনেক রেকর্ড একটি একক রেকর্ডের সাথে সম্পর্কিত থাকতে পারে।
One-to-Many Mapping Example
ধরা যাক, আমাদের Department এবং Employee টেবিল রয়েছে, যেখানে একটি Department এর অনেক Employee থাকতে পারে।
@Entity
@Table(name = "department")
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "department")
private Set<Employee> employees;
// Getters and Setters
}
@Entity
@Table(name = "employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
// Getters and Setters
}
এখানে, Department টেবিলের একটি রেকর্ড অনেক Employee রেকর্ডের সাথে সম্পর্কিত থাকতে পারে। mappedBy অ্যাট্রিবিউট দ্বারা, Hibernate জানে যে department ক্লাসের মধ্যে সম্পর্কটি Employee ক্লাসের মধ্যে বিদ্যমান।
3. Many-to-Many Mapping
Many-to-Many Mapping হল এমন একটি সম্পর্ক যেখানে একটি টেবিলের একাধিক রেকর্ড অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে। Hibernate-এ এই সম্পর্কের জন্য একটি junction table বা association table প্রয়োজন হয়, যা দুটি টেবিলের মধ্যে সম্পর্ক রাখে।
Many-to-Many Mapping Example
ধরা যাক, আমাদের দুটি ক্লাস রয়েছে: Student এবং Course, এবং একেকটি Student একাধিক Course গ্রহণ করতে পারে এবং একেকটি Course অনেক Student-এর জন্য হতে পারে।
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id"))
private Set<Course> courses;
// Getters and Setters
}
@Entity
@Table(name = "course")
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(mappedBy = "courses")
private Set<Student> students;
// Getters and Setters
}
এখানে, Student এবং Course টেবিলের মধ্যে একটি Many-to-Many সম্পর্ক প্রতিষ্ঠিত হয়েছে। @JoinTable অ্যানোটেশনটি একটি junction table (student_course) তৈরি করে, যা student_id এবং course_id সহ সম্পর্ক রাখে।
4. Inheritance Mapping
Hibernate ইনহেরিটেন্স ম্যাপিং দ্বারা এক ক্লাসের ইনহেরিটেড বৈশিষ্ট্যগুলিকে অন্য ক্লাসে মানিয়ে নেয়। Hibernate এ তিনটি ইনহেরিটেন্স ম্যাপিং কৌশল রয়েছে:
- Single Table Inheritance
- Joined Table Inheritance
- Table Per Class Inheritance
Single Table Inheritance Example
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "vehicle_type", discriminatorType = DiscriminatorType.STRING)
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Getters and Setters
}
@Entity
@DiscriminatorValue("car")
public class Car extends Vehicle {
private int numberOfDoors;
// Getters and Setters
}
@Entity
@DiscriminatorValue("bike")
public class Bike extends Vehicle {
private boolean hasPedals;
// Getters and Setters
}
এখানে, Vehicle ক্লাসের সকল ইনহেরিটেড ক্লাস (Car এবং Bike) একই টেবিলের মধ্যে সংরক্ষিত হবে।
5. Component Mapping (Embedded Objects)
Hibernate-এ component mapping ব্যবহার করে আপনি Java অবজেক্টের উপাদানগুলিকে আরেকটি অবজেক্টে অন্তর্ভুক্ত করতে পারেন। এটি @Embeddable এবং @Embedded অ্যানোটেশন ব্যবহার করে করা হয়।
@Embeddable
public class Address {
private String street;
private String city;
// Getters and Setters
}
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Embedded
private Address address;
// Getters and Setters
}
এখানে, Address ক্লাসটি Employee ক্লাসে অন্তর্ভুক্ত করা হয়েছে, যা component mapping হিসেবে কাজ করে।
Hibernate Mapping-এর মাধ্যমে আপনি আপনার Java অবজেক্ট এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক সহজেই স্থাপন করতে পারেন। Hibernate ORM আপনাকে বিভিন্ন ধরনের সম্পর্ক One-to-One, One-to-Many, Many-to-Many, Inheritance Mapping, এবং Component Mapping প্রদান করে, যা ডেটাবেস অপারেশন এবং ডেটা ম্যানেজমেন্টকে আরও সহজ এবং কার্যকরী করে তোলে।
- One-to-One: এক টেবিলের এক রেকর্ডের সাথে অন্য টেবিলের এক রেকর্ডের সম্পর্ক।
- One-to-Many / Many-to-One: এক টেবিলের এক রেকর্ডের সাথে অনেক রেকর্ডের সম্পর্ক।
- Many-to-Many: এক টেবিলের অনেক রেকর্ডের সাথে অন্য টেবিলের অনেক রেকর্ডের সম্পর্ক।
- Inheritance Mapping: একাধিক ক্লাসের মধ্যে ইনহেরিটেড বৈশিষ্ট্যগুলির সম্পর্ক।
- Component Mapping: অবজেক্টের উপাদানগুলির মধ্যে সম্পর্ক স্থাপন।
Read more