Hibernate হল একটি ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা জাভা অ্যাপ্লিকেশনে ডেটাবেস পরিচালনা করার জন্য ব্যবহৃত হয়। Hibernate-এ, ডেটাবেস টেবিলের সাথে Java classes কে মাপ (map) করার জন্য কিছু অ্যানোটেশন ব্যবহার করা হয়। এর মধ্যে @Entity এবং @Table অ্যানোটেশন দুটি খুব গুরুত্বপূর্ণ, কারণ এগুলি ডেটাবেস টেবিল এবং জাভা ক্লাসের মধ্যে সম্পর্ক নির্ধারণ করে।
1. @Entity Annotation
@Entity অ্যানোটেশনটি Hibernate-এ একটি Java ক্লাসকে ডেটাবেস টেবিলের সাথে ম্যাপ করার জন্য ব্যবহৃত হয়। এই অ্যানোটেশনটি Hibernate কে জানায় যে এই ক্লাসটি একটি persistent entity এবং এটি একটি ডেটাবেস টেবিলের সাথে সম্পর্কিত।
@Entityক্লাসের উপর ব্যবহৃত হয়।- প্রতিটি
@Entityক্লাসে অন্তত একটি@Idঅ্যানোটেশন থাকা উচিত, যা এই ক্লাসের প্রাইমারি কী (primary key) নির্ধারণ করে।
@Entity ব্যবহার:
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity // Specifies that this class is an entity
public class User {
@Id // Marks this field as the primary key
private int id;
private String name;
private String 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 ক্লাসে ব্যবহৃত হয়েছে, যা Hibernate কে জানায় যে এই ক্লাসটি ডেটাবেসের একটি টেবিলের সাথে সম্পর্কিত। @Id অ্যানোটেশনটি id ফিল্ডকে প্রাইমারি কী হিসেবে নির্ধারণ করেছে।
2. @Table Annotation
@Table অ্যানোটেশনটি ডেটাবেস টেবিলের নাম এবং অন্যান্য গুণাবলী (properties) কনফিগার করার জন্য ব্যবহৃত হয়। এটি ঐচ্ছিক (optional), তবে যদি ডিফল্ট টেবিল নাম (যা ক্লাসের নামের সাথে মেলে) পরিবর্তন করতে চান, তাহলে @Table অ্যানোটেশন ব্যবহার করতে হবে।
@Tableঅ্যানোটেশনটি@Entityক্লাসে ব্যবহৃত হয়।@Tableঅ্যানোটেশনের মধ্যেnameপ্যারামিটার ব্যবহার করে ডেটাবেস টেবিলের নাম নির্ধারণ করা যায়।
@Table ব্যবহার:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "users") // Specifies the name of the table in the database
public class User {
@Id // Marks this field as the primary key
private int id;
private String name;
private String 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;
}
}
এখানে, @Table(name = "users") ব্যবহার করে User ক্লাসটি users নামের টেবিলের সাথে ম্যাপ করা হয়েছে। যদি আপনি @Table না ব্যবহার করেন, তবে Hibernate ক্লাসের নামের সাথে মেলে এমন ডেটাবেস টেবিল তৈরি করবে (যেমন User ক্লাসের জন্য user টেবিল)।
@Entity এবং @Table এর মধ্যে সম্পর্ক
@Entityঅ্যানোটেশন শুধুমাত্র ক্লাসটিকে একটি persistent entity হিসেবে চিহ্নিত করে, যাতে Hibernate সেই ক্লাসকে একটি টেবিলের সাথে সম্পর্কিত হিসেবে বিবেচনা করে।@Tableঅ্যানোটেশন টেবিলের নাম এবং অন্যান্য বৈশিষ্ট্য কাস্টমাইজ করতে ব্যবহৃত হয়, যেমন টেবিলের নাম, ইনডেক্স, টেবিলের স্কিমা ইত্যাদি।
@Table এর আরও বৈশিষ্ট্য:
name: টেবিলের নাম নির্ধারণ করে। যদি এই প্যারামিটারটি ব্যবহার না করা হয়, তবে ডিফল্টভাবে ক্লাসের নামের সাথে মেলে এমন টেবিল তৈরি করা হয়।schema: টেবিলের স্কিমা নির্ধারণ করে (যেমন, যদি ডাটাবেসে বিভিন্ন স্কিমা থাকে)।catalog: টেবিলের ক্যাটালগ নির্ধারণ করে।uniqueConstraints: টেবিলের উপর ইউনিক কনস্ট্রেইনটস যোগ করতে ব্যবহৃত হয়।
উদাহরণ: @Table এর পূর্ণ ব্যবহার
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;
@Entity
@Table(
name = "users", // Table name
schema = "app_schema", // Schema name (optional)
uniqueConstraints = {@UniqueConstraint(columnNames = {"email"})} // Unique constraint on 'email' column
)
public class User {
@Id
private int id;
private String name;
private String 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;
}
}
এখানে, @Table এর মধ্যে uniqueConstraints ব্যবহার করে email কলামে ইউনিক কনস্ট্রেইন্ট যোগ করা হয়েছে, যার মানে হলো এই কলামে একাধিক রিপিটেড মান থাকতে পারবে না।
@Entity এবং @Table অ্যানোটেশন ব্যবহার করার উপকারিতা:
- ডেটাবেস টেবিলের সাথে অবজেক্ট ম্যাপিং:
@Entityএবং@Tableব্যবহারের মাধ্যমে আপনি ডেটাবেস টেবিলের সাথে জাভা অবজেক্টের সম্পর্ক তৈরি করতে পারেন।
- ডেটাবেস নিরপেক্ষতা:
- Hibernate আপনাকে ডেটাবেসের নির্দিষ্ট কোড লেখার পরিবর্তে অবজেক্ট-ওরিয়েন্টেড মডেল ব্যবহার করার সুযোগ দেয়। এতে আপনি ডেটাবেসের বিভিন্ন ধরনের ব্যবহারের পরিবর্তে এক কনসিস্টেন্ট কোড ব্যবহার করতে পারেন।
- টেবিলের কাস্টমাইজেশন:
@Tableঅ্যানোটেশন ব্যবহার করে আপনি টেবিলের নাম, স্কিমা, ইউনিক কনস্ট্রেইনটস ইত্যাদি কাস্টমাইজ করতে পারেন।
@Entityএবং@Tableঅ্যানোটেশনগুলি Hibernate এ ডেটাবেস টেবিল এবং জাভা ক্লাসের মধ্যে সম্পর্ক স্থাপন করে।@Entityক্লাসকে একটি persistent entity হিসেবে চিহ্নিত করে, এবং@Tableডেটাবেস টেবিলের নাম এবং অন্যান্য কনফিগারেশন কাস্টমাইজ করতে সহায়তা করে।
Hibernate ব্যবহার করলে আপনি সহজেই অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে ডেটাবেস ম্যানিপুলেশন করতে পারবেন, যা কোডকে আরও পরিষ্কার এবং মেইন্টেনেবল করে তোলে।
Read more