Hibernate হল একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা Java objects এবং relational database tables এর মধ্যে সম্পর্ক তৈরি এবং পরিচালনা করে। Hibernate এর মাধ্যমে, আপনি Java ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক প্রতিষ্ঠা করতে পারেন, যাতে অবজেক্ট রিলেশনাল ম্যাপিং সহজ এবং স্বচ্ছ হয়।
Hibernate-এর Entity এবং Table এর মধ্যে সম্পর্ক কিভাবে কাজ করে তা বোঝার জন্য আমাদের কিছু মৌলিক ধারণা জানা প্রয়োজন। এখানে Entity ক্লাস এবং Table এর মধ্যে সম্পর্ক প্রতিষ্ঠা করার পদ্ধতি, এবং annotations ব্যবহার করে কিভাবে এটি করা হয়, তা বিস্তারিতভাবে আলোচনা করা হবে।
1. Entity এবং Table: বেসিক ধারণা
- Entity: Hibernate এ একটি Entity হলো একটি Java class যা ডেটাবেসের একটি টেবিলের সাথে সম্পর্কিত। Entity ক্লাসের প্রতিটি অবজেক্ট একটি রেকর্ড হিসাবে ডেটাবেস টেবিলে সংরক্ষিত হয়। Entity ক্লাসটি সাধারণত একটি POJO (Plain Old Java Object) হয় এবং এতে annotations বা XML কনফিগারেশন ব্যবহার করে টেবিলের সাথে সম্পর্ক স্থাপন করা হয়।
- Table: Table হল ডেটাবেসের একটি কাঠামো যা rows (records) এবং columns (fields) এর মধ্যে ডেটা সংরক্ষণ করে। Hibernate Entity ক্লাসের ক্ষেত্রগুলো (fields) টেবিলের কলাম হিসেবে ম্যাপ করা হয়, এবং Entity ক্লাসের ইনস্ট্যান্স টেবিলের রেকর্ড (row) হিসেবে ব্যবহৃত হয়।
2. Hibernate Entity ক্লাসের তৈরি এবং টেবিলের সাথে সম্পর্ক
Hibernate এ Entity এবং Table এর মধ্যে সম্পর্ক স্থাপনের জন্য @Entity এবং @Table অ্যানোটেশন ব্যবহৃত হয়।
@Entity অ্যানোটেশন:
- @Entity অ্যানোটেশন Hibernate কে জানায় যে এটি একটি entity class এবং এই ক্লাসটি ডেটাবেস টেবিলের সাথে সম্পর্কিত।
@Table অ্যানোটেশন:
- @Table অ্যানোটেশন ব্যবহার করে, আপনি Entity ক্লাসের জন্য ডেটাবেস টেবিলের নাম স্পেসিফাই করতে পারেন। যদি এই অ্যানোটেশনটি ব্যবহার না করেন, তবে Hibernate ডিফল্টভাবে Entity ক্লাসের নাম ব্যবহার করে টেবিলের নাম ধরে নেবে।
3. Hibernate Entity এবং Table এর মধ্যে সম্পর্ক উদাহরণ
ধরা যাক, আমাদের একটি User নামের Entity ক্লাস আছে এবং আমরা এটিকে একটি users টেবিলের সাথে সম্পর্কিত করতে চাই।
Entity ক্লাস (User.java):
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Id;
@Entity
@Table(name = "users") // Mapping this entity to the 'users' table in the database
public class User {
@Id // Marks the primary key
private int id;
private String name;
private String email;
// Constructor, getters and setters
public User() {}
public User(int id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Getters and Setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
ব্যাখ্যা:
- @Entity:
Userক্লাসটি একটি Entity হিসেবে চিহ্নিত করেছে, যা ডেটাবেসের একটি টেবিলের সাথে সম্পর্কিত। - @Table(name = "users"):
Userক্লাসটিusersটেবিলের সাথে সম্পর্কিত। এটি ডেটাবেসেusersনামের টেবিলটি মানে যে ডেটাবেসে এই টেবিলের সঙ্গে সম্পর্কিত সব রেকর্ড User ক্লাসের অবজেক্টের মতো আচরণ করবে। - @Id:
idফিল্ডটি প্রাইমারি কী হিসেবে চিহ্নিত করা হয়েছে, যেটি ডেটাবেস টেবিলের রেকর্ডের জন্য একটি ইউনিক আইডেন্টিফায়ার হিসেবে কাজ করবে।
4. Hibernate Mapping Between Entity and Table
এখন User Entity ক্লাসটির সাথে সম্পর্কিত ডেটাবেস টেবিল users হতে হবে, যেখানে তিনটি কলাম থাকবে:
- id: প্রাইমারি কী হিসেবে কাজ করবে।
- name: ব্যবহারকারীর নাম।
- email: ব্যবহারকারীর ইমেল।
Hibernate ডাটাবেসের users টেবিলের কলামগুলি স্বয়ংক্রিয়ভাবে Entity ক্লাসের ফিল্ডগুলির সাথে ম্যাপ করে।
Database Table (users) Example:
| id | name | |
|---|---|---|
| 1 | John Doe | john@example.com |
| 2 | Jane Smith | jane@example.com |
এখানে, id, name, এবং email কলামগুলো Hibernate Entity ক্লাস User এর fields হিসেবে ম্যাপ হবে।
5. Hibernate Entity Class থেকে ডেটাবেসে ইনসার্ট করা
Hibernate ব্যবহার করে ডেটাবেসে insert করার জন্য, সাধারণত Session ব্যবহৃত হয়। Hibernate সেশন অবজেক্ট ব্যবহার করে ডেটাবেসে অবজেক্ট সেভ করা হয়।
Hibernate Insert Example:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateExample {
public static void main(String[] args) {
// Create session factory
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml")
.addAnnotatedClass(User.class)
.buildSessionFactory();
// Create session
Session session = factory.getCurrentSession();
try {
// Create a new User object
User newUser = new User(1, "John Doe", "john@example.com");
// Start a transaction
session.beginTransaction();
// Save the User object
session.save(newUser);
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
ব্যাখ্যা:
session.save(newUser)লাইনেUserঅবজেক্টটিusersটেবিলে ইনসার্ট করা হবে। Hibernate অটোমেটিকভাবে User Entity ক্লাসের ফিল্ডগুলির মানusersটেবিলের কলামগুলির সঙ্গে ম্যাপ করে ইনসার্ট করবে।
6. Entity এবং Table এর সম্পর্কের আরও কিছু কনফিগারেশন
@IdClass বা @EmbeddedId:
- @IdClass বা @EmbeddedId অ্যানোটেশন ব্যবহার করে আপনি যৌথ প্রাইমারি কী ব্যবহার করতে পারেন।
@Entity
@IdClass(UserId.class) // Composite primary key using UserId class
public class User {
@Id
private int id;
@Id
private String username;
}
এখানে UserId ক্লাসটি দুটি ফিল্ড (id এবং username) ব্যবহার করে একটি যৌথ প্রাইমারি কী তৈরি করবে।
Hibernate Entity এবং Table এর মধ্যে সম্পর্ক অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি Java objects এবং relational database tables এর মধ্যে সঠিক ম্যাপিং এবং ডেটা ব্যবস্থাপনা নিশ্চিত করে। Hibernate অ্যানোটেশন ব্যবহার করে, আপনি সহজেই Java ক্লাস এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করতে পারেন এবং Hibernate ORM প্রযুক্তি ব্যবহারের মাধ্যমে ডেটাবেস ইন্টারঅ্যাকশন প্রক্রিয়া অনেক সহজ এবং কার্যকরী করে তোলে।
@Entity এবং @Table অ্যানোটেশনগুলি Entity এবং Table এর মধ্যে সম্পর্ক প্রতিষ্ঠা করার মূল উপাদান। এগুলি ডেটাবেসের টেবিলের কলামগুলির সঙ্গে Java অবজেক্টের ফিল্ডগুলির ম্যাপিং নিশ্চিত করে। Hibernate এর মাধ্যমে, আপনি এই সম্পর্কগুলি সহজেই কনফিগার এবং পরিচালনা করতে পারেন।
Read more