JPA (Java Persistence API) হল একটি Java API যা object-relational mapping (ORM) এর জন্য ডিজাইন করা হয়েছে, এবং এটি Java অ্যাপ্লিকেশনগুলিতে ডেটাবেসের সাথে যোগাযোগ করার জন্য একটি স্ট্যান্ডার্ড প্রদান করে। Hibernate হল একটি JPA implementation যা ORM এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ সহজ করে তোলে। JPA এবং Hibernate একই উদ্দেশ্য সাধন করে, তবে JPA একটি specification (বিশেষজ্ঞতা) এবং Hibernate হল তার একটি implementation।
Hibernate-কে JPA ব্যবহার করে কাজ করতে সক্ষম করতে, আপনি JPA annotations ব্যবহার করবেন, যা Hibernate ক্যাশিং, transaction management, এবং persistence context-সহ ডেটাবেস অপারেশনগুলিকে সহজতর করবে। Hibernate জিপিএ (JPA) স্পেসিফিকেশন অনুসরণ করে এবং ডেটাবেসের সাথে সম্পর্কিত কার্যক্রম পরিচালনা করে।
JPA এবং Hibernate এর সম্পর্ক
- JPA হল একটি standard API যা Java objects এবং relational databases এর মধ্যে সম্পর্ক স্থাপন করার জন্য ব্যবহৃত হয়। এটি API প্রদান করে, তবে জিপিএ নিজে কোনো বাস্তবায়ন নয়।
- Hibernate হল JPA এর একটি অন্যতম জনপ্রিয় বাস্তবায়ন, যা JPA স্পেসিফিকেশন অনুসরণ করে, তবে Hibernate নিজেও অনেক অতিরিক্ত বৈশিষ্ট্য প্রদান করে, যেমন second-level cache, query caching, batch processing ইত্যাদি।
Hibernate এর সাথে JPA ব্যবহার করার উপায়
Hibernate এর সাথে JPA ব্যবহার করতে হলে, আপনার কিছু বিশেষ সেটিংস এবং অ্যানোটেশন ব্যবহার করতে হবে। এখানে আমরা Hibernate ব্যবহার করে JPA কনফিগারেশন এবং annotations সহ একটি entity management সিস্টেম তৈরি করব।
Step 1: Hibernate কনফিগারেশন ফাইল (hibernate.cfg.xml)
Hibernate কনফিগারেশন ফাইলে, JPA এর জন্য প্রয়োজনীয় কিছু প্রপার্টি কনফিগার করতে হবে। এখানে Hibernate কে JPA স্পেসিফিকেশন অনুসরণ করতে বলা হবে এবং ডেটাবেস সংযোগের জন্য প্রপার্টি সরবরাহ করতে হবে।
<!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 Database 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>
<!-- Enable Hibernate's automatic session context management -->
<property name="hibernate.current_session_context_class">thread</property>
<!-- Enable JPA -->
<property name="hibernate.jpa.jdbc.batch_size">30</property>
<!-- Show SQL Queries -->
<property name="hibernate.show_sql">true</property>
<!-- Hibernate HBM2DDL -->
<property name="hibernate.hbm2ddl.auto">update</property>
</session-factory>
</hibernate-configuration>
এখানে:
- hibernate.jpa.jdbc.batch_size: JPA কনফিগারেশন ফাইলেও batch_size নির্ধারণ করা হয়েছে যাতে একসাথে অনেক রেকর্ড ডাটাবেসে সঞ্চালিত হয়।
- hibernate.hbm2ddl.auto: ডেটাবেস স্কিমা আপডেট করার জন্য
updateসেট করা হয়েছে।
Step 2: JPA Entity Class (Employee.java)
JPA এর সাথে Hibernate ব্যবহার করতে হলে, @Entity এবং @Table এনোটেশন ব্যবহার করা হয়। এই এনোটেশনগুলি Hibernate কে বলে দেয় যে এটি একটি Entity Class এবং এটি ডেটাবেস টেবিলের সাথে সম্পর্কিত।
import javax.persistence.*;
@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
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;
}
}
এখানে:
- @Entity: এটি Hibernate কে জানায় যে
Employeeক্লাসটি একটি Entity এবং এটি ডেটাবেস টেবিলের সাথে সম্পর্কিত। - @Id: এটি primary key হিসেবে
idফিল্ডটি চিহ্নিত করে। - @GeneratedValue: Hibernate কে বলে যে primary key ফিল্ডের মানটি স্বয়ংক্রিয়ভাবে জেনারেট হবে (auto-increment)।
Step 3: EntityManager ব্যবহার করা
JPA ব্যবহার করার সময়, Hibernate এর সেশনের পরিবর্তে EntityManager ব্যবহার করা হয় ডেটাবেস অপারেশন পরিচালনা করতে। EntityManager হল JPA এর জন্য ডেটাবেসের সাথে যোগাযোগ করার মূল API।
import javax.persistence.*;
public class JPAExample {
public static void main(String[] args) {
// EntityManagerFactory তৈরি করা
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hibernateJpa");
// EntityManager তৈরি করা
EntityManager em = emf.createEntityManager();
// Transaction শুরু করা
em.getTransaction().begin();
// Employee অবজেক্ট তৈরি করা
Employee employee = new Employee("John Doe", 50000);
// Employee অবজেক্ট সেভ করা
em.persist(employee);
// Transaction কমিট করা
em.getTransaction().commit();
// Employee অবজেক্ট রিট্রিভ করা
Employee retrievedEmployee = em.find(Employee.class, employee.getId());
System.out.println("Retrieved Employee: " + retrievedEmployee.getName());
// EntityManager বন্ধ করা
em.close();
emf.close();
}
}
এখানে:
- EntityManagerFactory: JPA এ EntityManager তৈরি করার জন্য এটি প্রথমে তৈরি করতে হয়।
- EntityManager: এটি JPA এর মাধ্যমে ডেটাবেসে CRUD অপারেশন পরিচালনা করতে ব্যবহৃত হয়।
- persist(): নতুন entity অবজেক্ট ডেটাবেসে সেভ করতে ব্যবহৃত হয়।
- find(): entity অবজেক্ট রিট্রিভ করতে ব্যবহৃত হয়।
Step 4: JPA Configuration (persistence.xml)
JPA ব্যবহারের জন্য persistence.xml কনফিগারেশন ফাইল তৈরি করতে হয়, যেখানে ডেটাবেস কনফিগারেশন এবং EntityManagerFactory এর জন্য সেটিংস নির্ধারণ করা হয়। এই ফাইলটি META-INF ডিরেক্টরিতে থাকতে হবে।
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="hibernateJpa">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>Employee</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
</properties>
</persistence-unit>
</persistence>
এখানে:
- persistence-unit: এটি
hibernateJpaনামক একটি persistence unit তৈরি করে। - hibernate.dialect: Hibernate এর জন্য ডেটাবেসের ডায়ালেক্ট (এখানে H2 ডায়ালেক্ট) নির্ধারণ করা হয়েছে।
- hibernate.cache.use_second_level_cache: দ্বিতীয় স্তরের ক্যাশ ব্যবহার করার জন্য সেটিং।
Hibernate এর সাথে JPA ব্যবহার করে আপনি JPA স্পেসিফিকেশন অনুসরণ করে ডেটাবেস অপারেশনগুলো করতে পারেন। Hibernate একটি JPA implementation হিসেবে কাজ করে এবং JPA এর মাধ্যমে EntityManager এবং persistence-context ব্যবস্থাপনা করে ডেটাবেসের সাথে কার্যকরীভাবে কাজ করে। Hibernate এর সাথে JPA ব্যবহার করার জন্য আপনাকে JPA annotations এবং EntityManager ব্যবহার করতে হবে। Hibernate এই JPA স্পেসিফিকেশন অনুসরণ করে ডেটাবেস অপারেশনগুলোকে সহজ ও কার্যকরী করে তোলে, এবং আপনি Hibernate এর অতিরিক্ত বৈশিষ্ট্য যেমন caching, batch processing ইত্যাদি ব্যবহার করতে পারবেন।
Read more