Hibernate, একটি Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক, Java objects এবং relational database tables এর মধ্যে সম্পর্ক স্থাপন করতে সাহায্য করে। Hibernate এ Entity Classes এবং তাদের table mappings তৈরি করার জন্য বিভিন্ন annotations ব্যবহার করা হয়। এর মধ্যে সবচেয়ে গুরুত্বপূর্ণ @Entity, @Table, @Id, এবং @GeneratedValue। এই অ্যানোটেশনগুলি ডেটাবেস টেবিলের সাথে Java objects এর সম্পর্ক স্থাপন করতে ব্যবহৃত হয়।
এখানে আমরা এই অ্যানোটেশনগুলি কীভাবে ব্যবহার করতে হয় তা ব্যাখ্যা করব।
1. @Entity Annotation
@Entity অ্যানোটেশনটি Hibernate কে বলে যে এই ক্লাসটি একটি Entity এবং এটি ডেটাবেসের টেবিলের সাথে সম্পর্কিত। এই অ্যানোটেশনটি ব্যবহার না করলে Hibernate ওই ক্লাসটিকে Entity হিসেবে চিনবে না।
ব্যবহার:
import javax.persistence.*;
@Entity
public class Employee {
// Class definition
}
এখানে, @Entity অ্যানোটেশনটি Hibernate কে জানায় যে Employee ক্লাসটি একটি Entity এবং এটি ডেটাবেস টেবিলের সাথে সম্পর্কিত হবে।
2. @Table Annotation
@Table অ্যানোটেশনটি Hibernate কে বলে যে Entity ক্লাসটি কোন database table এর সাথে সম্পর্কিত হবে। এই অ্যানোটেশনটি সাধারণত @Entity অ্যানোটেশনের পরে ব্যবহৃত হয়, যদিও এটি optional (অপশনাল)।
ব্যবহার:
@Entity
@Table(name="employee") // Maps the Employee class to the "employee" table
public class Employee {
// Class definition
}
এখানে:
- @Table(name="employee"): এটি Hibernate কে বলে যে Employee ক্লাসটি ডেটাবেসের
employeeটেবিলের সাথে সম্পর্কিত।
যদি আপনি @Table ব্যবহার না করেন, তবে Hibernate স্বয়ংক্রিয়ভাবে Entity ক্লাসের নামটিকে টেবিলের নাম হিসেবে ব্যবহার করবে। উদাহরণস্বরূপ, Employee ক্লাসের জন্য Hibernate
employeeনামে একটি টেবিল তৈরি করবে।
3. @Id Annotation
@Id অ্যানোটেশনটি Hibernate কে বলে যে কোন ফিল্ডটি primary key হবে। এই ফিল্ডটির মানের মাধ্যমে Entity অবজেক্টটিকে শনাক্ত করা হয়।
ব্যবহার:
@Entity
@Table(name="employee")
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="salary")
private double salary;
// Constructors, getters, and setters
}
এখানে:
- @Id: এটি
idফিল্ডটিকে primary key হিসেবে চিহ্নিত করে। - @Column(name="id"): এটি ডেটাবেস টেবিলের কলাম নাম
idকে Entity ক্লাসেরidফিল্ডের সাথে ম্যাপ করে।
@Id অ্যানোটেশন ছাড়া Hibernate কোনো ফিল্ডকে primary key হিসেবে চিনবে না।
4. @GeneratedValue Annotation
@GeneratedValue অ্যানোটেশনটি Hibernate কে বলে যে primary key এর মানটি স্বয়ংক্রিয়ভাবে তৈরি করা হবে (auto-generated)। সাধারণত, এটি @Id অ্যানোটেশনের সাথে ব্যবহৃত হয় এবং এটি সাধারণত auto-increment বা sequence (ডাটাবেস ডায়ালেক্ট অনুযায়ী) এর মাধ্যমে কাজ করে।
ব্যবহার:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto-generate the primary key value
@Column(name="id")
private int id;
এখানে:
- @GeneratedValue(strategy = GenerationType.IDENTITY): এই স্ট্র্যাটেজি Hibernate কে বলে যে primary key ফিল্ডটি auto-increment হিসেবে পরিচালিত হবে (যেমন MySQL বা H2-এ)। এটি সাধারণত IDENTITY বা SEQUENCE এর মাধ্যমে কাজ করে, ডাটাবেস ড্রাইভার অনুযায়ী।
@GeneratedValue এর আরও কিছু স্ট্র্যাটেজি আছে:
- GenerationType.AUTO: Hibernate ডেটাবেসের উপর নির্ভর করে সঠিক স্ট্র্যাটেজি নির্বাচন করবে।
- GenerationType.IDENTITY: ডেটাবেসের auto-increment ফিচার ব্যবহার করবে (যেমন MySQL বা PostgreSQL)।
- GenerationType.SEQUENCE: ডেটাবেসের sequence ব্যবহার করবে (যেমন Oracle বা PostgreSQL)।
- GenerationType.TABLE: Hibernate টেবিলের মাধ্যমে কাস্টম primary key generation মেকানিজম ব্যবহৃত হবে।
Complete Example: @Entity, @Table, @Id, @GeneratedValue
এখানে একটি সম্পূর্ণ উদাহরণ দেওয়া হলো, যেখানে Employee Entity ক্লাস তৈরি করা হয়েছে এবং বিভিন্ন Hibernate অ্যানোটেশন ব্যবহার করা হয়েছে।
import javax.persistence.*;
@Entity
@Table(name="employee") // Mapping the entity to the "employee" table
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // Auto-generate the primary key
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@Column(name="salary")
private double salary;
// Constructors, getters, and setters
public Employee() {}
public Employee(String name, double salary) {
this.name = name;
this.salary = salary;
}
// 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 double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
Hibernate Configuration (hibernate.cfg.xml)
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- JDBC connection settings -->
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.url">jdbc:h2:mem:testdb</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<!-- Hibernate Dialect -->
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<!-- Show SQL queries -->
<property name="hibernate.show_sql">true</property>
<!-- Hibernate HBM2DDL -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
Main Program: Hibernate CRUD Operations
import org.hibernate.*;
import org.hibernate.cfg.Configuration;
public class MainApp {
public static void main(String[] args) {
// Create SessionFactory and Session
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml")
.addAnnotatedClass(Employee.class)
.buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Create new Employee object
Employee employee = new Employee("John Doe", 50000);
// Start a transaction
session.beginTransaction();
// Save the employee object
session.save(employee);
// Commit the transaction
session.getTransaction().commit();
// Retrieve the employee based on the id
session = factory.getCurrentSession();
session.beginTransaction();
Employee retrievedEmployee = session.get(Employee.class, employee.getId());
System.out.println("Retrieved Employee: " + retrievedEmployee.getName());
// Commit the transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Hibernate-এ @Entity, @Table, @Id, এবং @GeneratedValue অ্যানোটেশনগুলি মূল ভূমিকা পালন করে যখন Java objects এবং relational database tables এর মধ্যে সম্পর্ক তৈরি করা হয়। এই অ্যানোটেশনগুলির মাধ্যমে আপনি Java classes কে database tables এর সাথে সংযুক্ত করতে পারেন এবং ডেটাবেস অপারেশনগুলো অবজেক্ট-ওরিয়েন্টেড পদ্ধতিতে পরিচালনা করতে পারেন। Hibernate ORM এর মাধ্যমে primary key generation, entity mappings, এবং database schema সহজে পরিচালনা করা যায়।
Read more