Skill

JPA এর বেসিক কনসেপ্ট

জেপিএ  (JPA) - Java Technologies

310

JPA (Java Persistence API) একটি Java EE (Enterprise Edition) স্পেসিফিকেশন যা ডেটাবেসের সাথে Java অ্যাপ্লিকেশনগুলির ডেটা পার্সিস্টেন্স পরিচালনা করতে ব্যবহৃত হয়। JPA Java প্রোগ্রামিং ভাষায় অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) এর একটি স্ট্যান্ডার্ড স্পেসিফিকেশন প্রদান করে, যা অবজেক্ট ভিত্তিক ডেটা মডেল এবং রিলেশনাল ডেটাবেসের মধ্যে ডেটা সংরক্ষণ ও পরিচালনা করার জন্য ব্যবহৃত হয়।

JPA সাধারণত Hibernate, EclipseLink, এবং OpenJPA এর মতো ORM ফ্রেমওয়ার্কের সাথে কাজ করে, তবে JPA শুধুমাত্র একটি স্পেসিফিকেশন এবং এর জন্য একটি রেফারেন্স ইমপ্লিমেন্টেশন থাকে।


JPA এর প্রধান কনসেপ্ট


১. Entity

Entity হল Java ক্লাস যা একটি টেবিলের প্রতিনিধিত্ব করে। একটি Entity ক্লাস সাধারণত ডেটাবেসের টেবিলের একটি সারির প্রতিনিধিত্ব করে। Entity ক্লাসের মধ্যে আপনি ডেটাবেসের কলামগুলির জন্য প্রপার্টি ডিফাইন করেন।

Entity ক্লাস উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private int id;
    private String name;
    private String department;

    // 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 getDepartment() { return department; }
    public void setDepartment(String department) { this.department = department; }
}

এখানে:

  • @Entity অ্যানোটেশনটি ক্লাসটিকে JPA Entity হিসেবে চিহ্নিত করে।
  • @Id অ্যানোটেশনটি নির্দেশ করে যে এই ফিল্ডটি Entity এর প্রাথমিক কী (Primary Key)।

২. Persistence Context

Persistence Context হল একটি জাভা অবজেক্টের জীবনকাল যা ডেটাবেসের সাথে সম্পর্কিত। এটি ডেটাবেসের সাথে সংযুক্ত Entity অবজেক্টগুলির集合 হিসেবে কাজ করে। EntityManager এর মাধ্যমে JPA একটি Persistence Context তৈরি করে।

Persistence Context উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class EmployeeService {

    @PersistenceContext
    private EntityManager entityManager;

    public Employee findEmployeeById(int id) {
        return entityManager.find(Employee.class, id);
    }
}

এখানে:

  • EntityManager হল JPA এর মূল ইন্টারফেস যা ডেটাবেসের সাথে Entity গুলোর CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করে।

৩. EntityManager

EntityManager হল JPA এর প্রধান API যা Entity অবজেক্টের সাথে ইন্টারঅ্যাক্ট করে। এর মাধ্যমে আপনি ডেটাবেসে Entity সংরক্ষণ, আপডেট, মুছে ফেলা এবং রিড (read) করতে পারেন।

EntityManager অপারেশন উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class EmployeeService {

    @PersistenceContext
    private EntityManager entityManager;

    public void saveEmployee(Employee employee) {
        entityManager.persist(employee);  // Save to database
    }

    public Employee getEmployee(int id) {
        return entityManager.find(Employee.class, id);  // Retrieve from database
    }

    public void deleteEmployee(Employee employee) {
        entityManager.remove(employee);  // Delete from database
    }
}

এখানে:

  • persist(): একটি Entity অবজেক্ট ডেটাবেসে সংরক্ষণ করতে ব্যবহৃত হয়।
  • find(): ডেটাবেস থেকে Entity অবজেক্ট খুঁজে বের করতে ব্যবহৃত হয়।
  • remove(): Entity অবজেক্টটি ডেটাবেস থেকে মুছে ফেলা হয়।

৪. JPQL (Java Persistence Query Language)

JPQL হল একটি জাভা ভিত্তিক কুয়েরি ভাষা যা SQL এর মতো দেখতে, তবে এটি Entity ক্লাসের উপর ভিত্তি করে কুয়েরি তৈরি করে। JPQL ডেটাবেসের টেবিলের পরিবর্তে Entity ক্লাস এবং তাদের প্রপার্টি ব্যবহার করে কুয়েরি লেখা হয়।

JPQL উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.List;

public class EmployeeService {

    @PersistenceContext
    private EntityManager entityManager;

    public List<Employee> getEmployeesByDepartment(String department) {
        String jpql = "SELECT e FROM Employee e WHERE e.department = :dept";
        TypedQuery<Employee> query = entityManager.createQuery(jpql, Employee.class);
        query.setParameter("dept", department);
        return query.getResultList();
    }
}

এখানে:

  • SELECT e FROM Employee e — এটি Employee Entity ক্লাস থেকে ডেটা নির্বাচন করছে।
  • WHERE e.department = :dept — এটি department প্রপার্টির ভিত্তিতে ফিল্টার করছে।

৫. Transaction Management

JPA এ ডেটাবেস ট্রানজেকশন ম্যানেজমেন্ট সাধারণত EntityManager বা Spring দ্বারা পরিচালিত হয়। একটি ট্রানজেকশনের মধ্যে একাধিক ডেটাবেস অপারেশন (যেমন, insert, update, delete) একত্রিত করা হয়, এবং যদি কোনো সমস্যা হয়, তবে পুরো ট্রানজেকশনটি রোলব্যাক করা হয়।

Transaction Management উদাহরণ (JPA):

import javax.persistence.EntityTransaction;

public class EmployeeService {

    private EntityManager entityManager;

    public void saveEmployee(Employee employee) {
        EntityTransaction transaction = entityManager.getTransaction();
        try {
            transaction.begin();
            entityManager.persist(employee);  // Save to database
            transaction.commit();
        } catch (RuntimeException e) {
            if (transaction.isActive()) {
                transaction.rollback();  // Rollback in case of an error
            }
            throw e;
        }
    }
}

এখানে:

  • begin() — ট্রানজেকশন শুরু করা হয়।
  • commit() — সফলভাবে ট্রানজেকশন সম্পন্ন করা হয়।
  • rollback() — কোনো ত্রুটি হলে ট্রানজেকশন রোলব্যাক করা হয়।

৬. Cascade Types

JPA তে Cascade অপশন ব্যবহার করা হয় যাতে আপনি একটি Entity এর সাথে সম্পর্কিত অন্য Entity গুলোও একসাথে persisting, merging বা removing করতে পারেন।

Cascade Types উদাহরণ:

import javax.persistence.CascadeType;
import javax.persistence.OneToMany;

public class Department {

    @OneToMany(cascade = CascadeType.ALL)
    private List<Employee> employees;

    // Getters and Setters
}

এখানে:

  • CascadeType.ALL — এই অপশন ব্যবহার করলে, Department Entity এর সাথে সম্পর্কিত সকল Employee Entity-ও cascade হয়ে যাবে।

সারাংশ


JPA (Java Persistence API) হল একটি শক্তিশালী এবং নমনীয় স্পেসিফিকেশন যা Java অ্যাপ্লিকেশনগুলিতে ডেটাবেসের সাথে যোগাযোগের জন্য ব্যবহৃত হয়। JPA Entity, EntityManager, JPQL, এবং Transaction Management এর মাধ্যমে ডেটাবেসের সাথে সম্পর্কিত অবজেক্টগুলো ম্যানেজ করতে সহায়তা করে। এই প্রযুক্তি আপনাকে ডেটাবেসের টেবিলের সাথে সম্পর্কিত Java অবজেক্ট তৈরি এবং পরিচালনা করতে দেয়, এবং এটি SQL কোডের চেয়ে আরো সহজ এবং সুসংগঠিত উপায়ে ডেটাবেস ম্যানিপুলেশন করার সুযোগ প্রদান করে।

Content added By

ORM (Object-Relational Mapping) হল একটি প্রযুক্তি যা অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং ভাষা (যেমন Java) এবং রিলেশনাল ডেটাবেসের মধ্যে ডেটা ম্যানিপুলেশন সম্পর্কিত সমস্যাগুলির সমাধান করে। ORM এর মাধ্যমে ডেভেলপাররা ডেটাবেস টেবিলগুলির সাথে কাজ করার জন্য অবজেক্টগুলো ব্যবহার করতে পারেন, যেখানে টেবিলের প্রতিটি রেকর্ড একটি অবজেক্ট হিসেবে দেখা হয়।

JPA (Java Persistence API) হল Java প্ল্যাটফর্মের একটি স্পেসিফিকেশন যা ORM প্রযুক্তির সাথে কাজ করার জন্য Java এ স্ট্যান্ডার্ড API প্রদান করে। JPA-এর মাধ্যমে Java অবজেক্ট এবং রিলেশনাল ডেটাবেসের মধ্যে সঞ্চালিত ডেটার মধ্যে স্বয়ংক্রিয় ম্যাপিং সম্ভব হয়।


ORM (Object-Relational Mapping) কি?


ORM হল একটি প্রোগ্রামিং কৌশল যার মাধ্যমে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (OOP) এবং রিলেশনাল ডেটাবেসের মধ্যে ডেটা এক্সচেঞ্জ এবং সম্পর্ক স্থাপন সহজ হয়। ORM এর মাধ্যমে ডেভেলপাররা ডেটাবেস টেবিলের সাথে কাজ করার জন্য সাধারণত অবজেক্ট ব্যবহার করতে পারেন, এবং এটি ডেটাবেসের রেকর্ডগুলির সাথে সম্পর্কিত তথ্য অবজেক্টের আকারে ম্যানিপুলেট করতে সক্ষম করে।

ORM এর প্রধান কাজগুলি:

  1. ডেটাবেস টেবিল এবং অবজেক্টের মধ্যে সম্পর্ক স্থাপন:
    • ORM একটি ডেটাবেস টেবিলকে একটি ক্লাসের সাথে সম্পর্কিত করে, এবং টেবিলের প্রতিটি রেকর্ডকে ক্লাসের একটি অবজেক্টে রূপান্তরিত করে।
  2. ডেটাবেস কুয়েরি ও ম্যানিপুলেশন সহজ করা:
    • ORM ডেটাবেসে SQL কুয়েরি লেখার প্রয়োজন কমিয়ে দেয়। ডেভেলপাররা অবজেক্ট ব্যবহার করে CRUD (Create, Read, Update, Delete) অপারেশন করতে পারেন এবং ORM এগুলিকে ডেটাবেস কুয়েরি তে রূপান্তর করে।
  3. কনভেনশন এবং কনফিগারেশন:
    • ORM অনেক কনভেনশন এবং কনফিগারেশন প্রদান করে, যা ডেটাবেস এবং কোডের মধ্যে একটি স্বাভাবিক ম্যাপিং তৈরি করতে সহায়তা করে।

JPA (Java Persistence API) এর ভূমিকা


JPA হল Java এ ORM প্রযুক্তি ব্যবহার করার জন্য একটি স্পেসিফিকেশন। এটি অবজেক্ট এবং ডেটাবেসের মধ্যে সম্পর্ক স্থাপন এবং ডেটাবেস অপারেশনকে অবজেক্ট-ওরিয়েন্টেড ভাবে পরিচালনা করতে সাহায্য করে।

JPA ব্যবহার করে ডেভেলপাররা ডেটাবেসের সাথে কাজ করার জন্য Java অবজেক্ট ব্যবহার করতে পারেন, এবং JPA-র মাধ্যমে ORM কনসেপ্টের সুবিধা পাওয়া যায়।

JPA এর মাধ্যমে ORM এর মূল কাজগুলো করা হয়:

  • Entity Mapping: ডেটাবেস টেবিল এবং Java অবজেক্টের মধ্যে সম্পর্ক তৈরি করা।
  • Persistence Context: ডেটাবেসে অবজেক্ট গুলি সেভ (persist), আপডেট (merge), এবং লোড (find) করা।
  • Query Language: JPA JPQL (Java Persistence Query Language) ব্যবহার করে ডেটাবেস কুয়েরি করা, যা SQL এর মতো হলেও Java অবজেক্টের ওপর কাজ করে।

JPA এর কাজের প্রক্রিয়া


  1. Entity Class তৈরি:
    • Java ক্লাসে @Entity অ্যানোটেশন ব্যবহার করে ডেটাবেস টেবিলের সাথে সম্পর্কিত অবজেক্ট তৈরি করা হয়।
  2. Database Operations:
    • JPA EntityManager ব্যবহার করে CRUD অপারেশন এবং কুয়েরি করা হয়।
  3. JPQL (Java Persistence Query Language):
    • JPA একটি কাস্টম কুয়েরি ল্যাঙ্গুয়েজ প্রদান করে, যা SQL এর মতো তবে তা Java অবজেক্টের উপর কাজ করে।

JPA উদাহরণ


এখন একটি সহজ JPA উদাহরণ দেখি, যেখানে Employee নামক একটি Entity ক্লাস তৈরি করা হয়েছে এবং এটি ডেটাবেসের employee টেবিলের সাথে সম্পর্কিত।

1. Employee Entity Class:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private int id;
    private String name;
    private String position;

    // Constructors, Getters, and Setters

    public Employee(int id, String name, String position) {
        this.id = id;
        this.name = name;
        this.position = position;
    }

    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 getPosition() {
        return position;
    }

    public void setPosition(String position) {
        this.position = position;
    }
}

এখানে:

  • @Entity অ্যানোটেশন দ্বারা Employee ক্লাসটি একটি JPA Entity হিসেবে ঘোষণা করা হয়েছে।
  • @Id দ্বারা id প্রপার্টি ডেটাবেস টেবিলের প্রাইমারি কি হিসেবে চিহ্নিত হয়েছে।

2. EmployeeRepository Interface:

import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Integer> {
    // Custom queries can be defined here
}

এখানে:

  • EmployeeRepository ইন্টারফেসটি JpaRepository ইন্টারফেসটি এক্সটেন্ড করেছে, যা JPA এর মাধ্যমে ডেটাবেস অপারেশনগুলো সহজ করে দেয়।
  • JpaRepository প্রাথমিক CRUD অপারেশনগুলো যেমন save(), findById(), deleteById() ইত্যাদি প্রদান করে।

3. EmployeeController:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class EmployeeController {

    @Autowired
    private EmployeeRepository employeeRepository;

    @GetMapping("/employees")
    public List<Employee> getEmployees() {
        return employeeRepository.findAll();
    }
}

এখানে:

  • EmployeeController ক্লাসটি REST API তৈরি করেছে যা GET /employees এ রিকোয়েস্ট পাঠালে সকল Employee অবজেক্ট JSON ফরম্যাটে রিটার্ন করবে।

4. JSON রেসপন্স:

যখন ক্লায়েন্ট GET /employees রিকোয়েস্ট পাঠাবে, তখন সার্ভার JSON রেসপন্স পাঠাবে, যা দেখতে এমন হবে:

[
    {
        "id": 1,
        "name": "John Doe",
        "position": "Software Engineer"
    },
    {
        "id": 2,
        "name": "Jane Smith",
        "position": "Project Manager"
    }
]

সারাংশ


ORM (Object-Relational Mapping) হল একটি প্রযুক্তি যা অবজেক্ট ও রিলেশনাল ডেটাবেসের মধ্যে সম্পর্ক স্থাপন করে। JPA (Java Persistence API) হল Java-তে ORM সমর্থন করার জন্য একটি স্ট্যান্ডার্ড স্পেসিফিকেশন। JPA ডেটাবেস টেবিলের সাথে Java অবজেক্টগুলোকে সম্পর্কিত করতে সহায়তা করে এবং ডেটাবেস অপারেশনগুলো সহজ করে।

JPA-এর মাধ্যমে আমরা Entity Class তৈরি করে ডেটাবেস টেবিলের সাথে সম্পর্ক স্থাপন করি এবং JPQL (Java Persistence Query Language) ব্যবহার করে ডেটাবেস কুয়েরি চালাই। Spring Data JPA আমাদের CRUD অপারেশনগুলিকে আরো সহজ এবং দ্রুত করে তোলে, যেটি ডেটাবেস অ্যাপ্লিকেশনগুলির জন্য খুবই উপকারী।

Content added By

JPA (Java Persistence API) হল Java এ ডেটাবেসের সাথে অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) পরিচালনার জন্য একটি স্ট্যান্ডার্ড API। JPA ডেটাবেসে অবজেক্টগুলিকে (এনটিটিজ) সংরক্ষণ এবং ম্যানিপুলেট করতে সহায়তা করে। এটি Hibernate, EclipseLink, OpenJPA ইত্যাদি বিভিন্ন ORM ইমপ্লিমেন্টেশন দিয়ে কাজ করে।

JPA-তে তিনটি গুরুত্বপূর্ণ কনসেপ্ট হল:

  1. Entity
  2. EntityManager
  3. EntityManagerFactory

1. Entity

JPA-তে Entity হল একটি ক্লাস যা ডেটাবেসের একটি টেবিলের প্রতিনিধিত্ব করে। Entity ক্লাসের প্রতিটি অবজেক্ট একটি রেকর্ড (row) হিসেবে ডেটাবেসে সংরক্ষিত হয়। Entity একটি সাধারণ Java ক্লাস, তবে এটি কিছু বিশেষ অ্যানোটেশন দ্বারা চিহ্নিত হয়, যা JPA কে বলে দেয় যে এটি একটি Entity।

Entity এর বৈশিষ্ট্য:

  • Entity ক্লাস সাধারণত @Entity অ্যানোটেশন দ্বারা চিহ্নিত হয়।
  • Entity ক্লাসের মধ্যে একটি primary key থাকতে হবে, যা @Id অ্যানোটেশন দ্বারা চিহ্নিত হয়।
  • Entity ক্লাসের মধ্যে getter এবং setter মেথড থাকা প্রয়োজন।

Entity উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Product {

    @Id
    private Long id;
    private String name;
    private Double price;

    // Constructor, Getters and Setters
    public Product(Long id, String name, Double price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }
}

এখানে:

  • @Entity অ্যানোটেশন দ্বারা Product ক্লাসটি একটি Entity হিসাবে চিহ্নিত হয়েছে।
  • @Id অ্যানোটেশন দ্বারা id ফিল্ডটিকে Entity-এর primary key হিসেবে চিহ্নিত করা হয়েছে।

2. EntityManager

EntityManager হল JPA-এর প্রধান ইন্টারফেস, যা Entity অবজেক্টগুলির জন্য CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করে। এটি ডেটাবেসের সাথে কাজ করার জন্য ব্যবহৃত হয় এবং Entity অবজেক্টগুলির মধ্যে ডেটার পলিং, ম্যানিপুলেশন, এবং লোডিং সঞ্চালিত করে।

EntityManager এর বৈশিষ্ট্য:

  • EntityManager এর মাধ্যমে Entity অবজেক্ট তৈরি, রিড, আপডেট এবং ডিলিট করা যায়।
  • এটি JPA এ ক্লাসগুলির পPersistency Context (একটি নির্দিষ্ট সেশন বা কনটেক্সট যেখানে Entity অবজেক্টগুলো কাজ করে) পরিচালনা করে।
  • EntityManager সাধারণত JPA এর মধ্যে ব্যবহৃত transactional অপারেশনগুলো পরিচালনা করে।

উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class ProductService {

    @PersistenceContext
    private EntityManager entityManager;

    // Create or Update Product
    public void saveProduct(Product product) {
        entityManager.persist(product);  // persist() method to insert or update
    }

    // Find a Product by id
    public Product findProduct(Long id) {
        return entityManager.find(Product.class, id);  // find() method to retrieve an entity
    }

    // Delete a Product by id
    public void deleteProduct(Long id) {
        Product product = findProduct(id);
        if (product != null) {
            entityManager.remove(product);  // remove() method to delete an entity
        }
    }
}

এখানে:

  • @PersistenceContext দ্বারা EntityManager কে ইনজেক্ট করা হয়েছে।
  • persist(), find(), এবং remove() মেথডগুলি EntityManager দ্বারা Entity অবজেক্ট পরিচালনা করছে।

3. EntityManagerFactory

EntityManagerFactory হল একটি ফ্যাক্টরি ক্লাস যা EntityManager তৈরি করার জন্য ব্যবহৃত হয়। এটি একটি thread-safe অবজেক্ট এবং একবার তৈরি হলে এটি সার্ভিসে ব্যবহৃত হতে পারে। EntityManagerFactory সাধারণত পুরো অ্যাপ্লিকেশনের জন্য একটি একক instance তৈরি হয়।

EntityManagerFactory এর বৈশিষ্ট্য:

  • এটি EntityManager তৈরি করে, যা Entity অবজেক্টগুলি পরিচালনা করে।
  • EntityManagerFactory ডেটাবেসের কনফিগারেশন সেটআপ এবং JPA সম্পর্কিত অন্যান্য কনফিগারেশন পরিচালনা করে।
  • এটি অ্যাপ্লিকেশন চলাকালীন একবারই তৈরি করা উচিত এবং প্রতিবার নতুন EntityManager তৈরি করতে ব্যবহৃত হয়।

উদাহরণ:

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class ProductService {

    private static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("productPU");

    public void saveProduct(Product product) {
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        entityManager.getTransaction().begin();
        entityManager.persist(product);
        entityManager.getTransaction().commit();
        entityManager.close();
    }
}

এখানে:

  • Persistence.createEntityManagerFactory("productPU") দ্বারা EntityManagerFactory তৈরি করা হয়েছে।
  • createEntityManager() মেথড দিয়ে EntityManager তৈরি করা হয় এবং ডেটাবেসে তথ্য সংরক্ষণ করার জন্য এটি ব্যবহৃত হয়।
  • EntityManagerFactory কেবলমাত্র একবার তৈরি হয় এবং এটি ব্যবহার করা হয়।

EntityManager, EntityManagerFactory, এবং Entity এর মধ্যে পার্থক্য

ConceptDescription
Entityএকটি ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।
EntityManagerEntity অবজেক্টগুলি পরিচালনা করার জন্য ব্যবহৃত একটি API, যা CRUD অপারেশনগুলো পরিচালনা করে।
EntityManagerFactoryএকটি ফ্যাক্টরি যা EntityManager তৈরি করে। একবার তৈরি হলে এটি সার্ভিসে ব্যবহৃত হয়।

সারাংশ


JPA (Java Persistence API) ডেটাবেসের সাথে অবজেক্ট-রিলেশনাল ম্যাপিং (ORM) করতে ব্যবহৃত হয়। এখানে:

  1. Entity হল ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে।
  2. EntityManager হল একটি API যা Entity অবজেক্টগুলির CRUD অপারেশন পরিচালনা করে।
  3. EntityManagerFactory হল একটি ফ্যাক্টরি যা EntityManager তৈরি করে এবং এটি ডেটাবেসের কনফিগারেশন পরিচালনা করে।

JPA ব্যবহার করে আমরা Java অবজেক্ট এবং ডেটাবেসের মধ্যে সম্পর্ক স্থাপন এবং ডেটা পরিচালনা করতে পারি।

Content added By

JPA (Java Persistence API) হল একটি ইন্টারফেস যা Java অ্যাপ্লিকেশনগুলিতে ডেটাবেসের সাথে যোগাযোগ করার জন্য ব্যবহৃত হয়। এটি ORM (Object-Relational Mapping) এর মাধ্যমে অবজেক্ট ও ডেটাবেস টেবিলের মধ্যে ম্যাপিং করতে সহায়তা করে। JPA-তে দুটি গুরুত্বপূর্ণ ধারণা হল Persistence Context এবং Persistence Unit, যা ডেটাবেস অপারেশন ও অবজেক্ট লাইফসাইকেল পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ।

Persistence Context


Persistence Context হল একটি পরিবেশ বা কন্টেক্সট যেখানে Entity অবজেক্টগুলো managed state তে থাকে। এটি কার্যকরভাবে EntityManager এর মাধ্যমে পরিচালিত হয়। যখন কোনো entity (অবজেক্ট) একটি persistence context তে থাকে, তখন তা managed entity হয়ে যায়, যার মানে হলো সেই entity তে পরিবর্তনগুলো স্বয়ংক্রিয়ভাবে ডেটাবেসে সেভ করা হবে।

Persistence Context-এর মাধ্যমে JPA ডেটাবেস ট্রানজেকশনের মধ্যে অবজেক্টগুলোকে ট্র্যাক করে এবং transactional consistency নিশ্চিত করে। এটি একটি unit of work হিসেবে কাজ করে।

Persistence Context-এর বৈশিষ্ট্য:

  1. EntityManager: এটি Persistence Context এর সাথে সম্পর্কিত। EntityManager অবজেক্টটি ডেটাবেসে CRUD অপারেশন (Create, Read, Update, Delete) সম্পাদন করার জন্য ব্যবহৃত হয়।
  2. Managed Entities: Persistence Context এ থাকা অবজেক্টগুলো managed entities নামে পরিচিত। EntityManager সেই অবজেক্টের ওপর ট্র্যাকিং করে এবং সেই অবজেক্টে করা পরিবর্তন ডেটাবেসে সেভ করে।
  3. Unit of Work: Persistence Context-এ থাকা সব অবজেক্টের পরিবর্তনগুলো একত্রে ডেটাবেসে commit করা হয়, যা এক একটি transaction এর অংশ হিসেবে কাজ করে।

উদাহরণ:

@Entity
public class User {
    @Id
    private Long id;
    private String name;

    // Getters and Setters
}

public class UserService {
    @PersistenceContext
    private EntityManager entityManager;

    public void createUser(User user) {
        entityManager.persist(user);  // Persisting an entity
    }

    public User findUser(Long id) {
        return entityManager.find(User.class, id);  // Retrieving an entity
    }
}

এখানে, @PersistenceContext অ্যানোটেশন দিয়ে EntityManager ইনজেক্ট করা হয়েছে, যা Persistence Context এর অংশ হিসেবে কাজ করবে।

Persistence Unit


Persistence Unit হল একটি কনফিগারেশন সেটআপ যা JPA এর মাধ্যমে ডেটাবেসে সংযোগ স্থাপন এবং পরিচালনা করতে সহায়তা করে। এটি একটি set of entities এবং configuration এর集合, যা ডেটাবেসের সাথে সংযোগ স্থাপন করতে ব্যবহৃত হয়। Persistence Unit সাধারণত persistence.xml ফাইলে কনফিগার করা হয়।

Persistence Unit-এর বৈশিষ্ট্য:

  1. persistence.xml: Persistence Unit সাধারণত META-INF/persistence.xml ফাইলে কনফিগার করা হয়, যেখানে ডেটাবেস সংযোগের জন্য প্রয়োজনীয় সেটিংস এবং Entity classes উল্লেখ করা থাকে।
  2. DataSource: Persistence Unit ডেটাবেসের সাথে সংযোগ স্থাপন করার জন্য DataSource বা JDBC কনফিগারেশন ধারণ করে।
  3. Transaction Management: এটি ট্রানজেকশন পরিচালনার জন্য JTA বা RESOURCE_LOCAL ব্যবহৃত হয়।

persistence.xml উদাহরণ:

<?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="myJpaUnit">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <jta-data-source>java:/MyDataSource</jta-data-source>
        <class>com.example.User</class> <!-- Entity class -->
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

এখানে:

  • name="myJpaUnit": Persistence Unit এর নাম।
  • <class>: Entity classes যা Persistence Unit এর অংশ।
  • <properties>: JPA কনফিগারেশন সেটিংস, যেমন Hibernate ডায়ালেক্ট, hibernate.dialect, এবং schema generation এর জন্য hibernate.hbm2ddl.auto প্রোপার্টি।

Persistence Context এবং Persistence Unit এর সম্পর্ক


  • Persistence Context এবং Persistence Unit একে অপরের সাথে সম্পর্কিত হলেও তাদের কাজের পরিসর আলাদা।
  • Persistence Unit হল configuration যা JPA এর মাধ্যমে EntityManagerFactory তৈরি করে এবং এটি ডেটাবেসের সাথে সম্পর্কিত।
  • Persistence Context হল একটি runtime state যা EntityManager দ্বারা পরিচালিত হয় এবং ডেটাবেসের সাথে managed entities কে সম্পর্কিত করে।

সারাংশ


  • Persistence Context হল একটি পরিবেশ যেখানে entities গুলি managed থাকে এবং EntityManager দ্বারা পরিচালিত হয়।
  • Persistence Unit হল একটি কনফিগারেশন সেটআপ যা ডেটাবেসের সাথে সংযোগ স্থাপন করতে ব্যবহৃত হয় এবং এতে Entity classes ও অন্যান্য সেটিংস থাকে।
  • JPA-তে Persistence Context এবং Persistence Unit একসাথে কাজ করে ডেটাবেসে কার্যকরীভাবে ডেটা পরিচালনা করতে।

Persistence Context এবং Persistence Unit জাভা অ্যাপ্লিকেশনের ডেটাবেস ইন্টিগ্রেশন এবং ডেটা ম্যানিপুলেশন সিস্টেমে গুরুত্বপূর্ণ ভূমিকা পালন করে, যা JPA এবং ORM ভিত্তিক অ্যাপ্লিকেশনগুলির কার্যকারিতা উন্নত করে।

Content added By

JPA (Java Persistence API) হল একটি Java API যা ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয় এবং Entity Lifecycle হল JPA এ Entity অবজেক্টের বিভিন্ন অবস্থা বর্ণনা করে। Entity অবজেক্টের চারটি মূল অবস্থা বা লাইফসাইকেল রয়েছে: New, Managed, Detached, এবং Removed। এই অবস্থা গুলি Entity এর জীবনচক্রের বিভিন্ন স্তর বোঝায় এবং JPA Entity Manager এ এই অবস্থা অনুযায়ী Entity গুলির সাথে কাজ করা হয়।

১. New (নতুন)

New অবস্থা তখন হয় যখন একটি Entity অবজেক্ট তৈরি করা হয়, কিন্তু সেটি এখনও EntityManager দ্বারা persisted হয়নি (ডেটাবেসে সংরক্ষিত হয়নি)। এর মানে হল যে Entity অবজেক্টটি ডেটাবেসের সাথে সম্পর্কিত নয়, এটি কেবলমাত্র একটি সাধারণ Java অবজেক্ট।

বৈশিষ্ট্য:

  • Entity অবজেক্টটি new কিওয়ার্ড দিয়ে তৈরি হয়।
  • Entity Manager এর মাধ্যমে এটি এখনও persist করা হয়নি।
  • ডেটাবেসে Entity টির কোনো রেকর্ড নেই।

উদাহরণ:

Person person = new Person();
person.setName("John Doe");
person.setAge(30);

এখানে, person অবজেক্টটি New অবস্থা এ আছে। এটি এখনও ডেটাবেসে সেভ হয়নি।

২. Managed (ম্যানেজড)

Managed অবস্থা তখন হয় যখন একটি Entity অবজেক্ট EntityManager দ্বারা পরিচালিত হয় এবং এটি ডেটাবেসে সংরক্ষিত থাকে। EntityManager যখন Entity অবজেক্টটি persist() মেথড দিয়ে ডেটাবেসে সেভ করে, তখন Entity অবজেক্টটি Managed অবস্থা লাভ করে।

বৈশিষ্ট্য:

  • Entity অবজেক্টটি EntityManager দ্বারা ম্যানেজড।
  • Persist অথবা Merge মেথডের মাধ্যমে Entity ডেটাবেসে সেভ করা হয়েছে।
  • ডেটাবেসে Entity এর একটি রেকর্ড রয়েছে এবং EntityManager স্বয়ংক্রিয়ভাবে এর জীবনচক্র পরিচালনা করে।

উদাহরণ:

EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();

Person person = new Person();
person.setName("Jane Doe");
person.setAge(28);

// EntityManager দ্বারা manage করা হচ্ছে
em.persist(person);

em.getTransaction().commit();

এখানে, person অবজেক্টটি Managed অবস্থায় রয়েছে কারণ এটি persist করা হয়েছে এবং EntityManager এর দ্বারা পরিচালিত।

৩. Detached (ডিটাচড)

Detached অবস্থা তখন হয় যখন একটি Entity অবজেক্টটি আগে Managed ছিল কিন্তু পরবর্তীতে EntityManager থেকে বিচ্ছিন্ন হয়ে যায়। এর মানে হল যে, Entity Manager এর অধীনে এখন আর Entity টি কাজ করছে না এবং Entity Manager এর পরিবর্তনগুলির সাথে Entity এর সম্পর্ক নেই। একবার EntityManager থেকে Entity ডিটাচ হলে, এটি পুনরায় ডেটাবেসে আপডেট করা হবে না যতক্ষণ না এটি আবার Managed অবস্থায় ফিরে না আসে।

বৈশিষ্ট্য:

  • Entity অবজেক্টটি EntityManager দ্বারা আর ম্যানেজ করা হচ্ছে না।
  • clear(), close() অথবা detach() মেথডের মাধ্যমে EntityManager থেকে বিচ্ছিন্ন হয়েছে।
  • Entity Manager থেকে ডিটাচ হওয়ার পর, Entity এর পরিবর্তনগুলো ডেটাবেসে সংরক্ষিত হবে না।

উদাহরণ:

Person person = em.find(Person.class, 1); // Managed State
em.getTransaction().commit();

// EntityManager থেকে detach
em.detach(person);  // Detached State

এখানে, person EntityManager থেকে detach হয়ে গেছে এবং এটি Detached অবস্থায় চলে এসেছে।

৪. Removed (রিমুভড)

Removed অবস্থা তখন হয় যখন একটি Entity অবজেক্ট ডেটাবেস থেকে মুছে ফেলা হয়। EntityManager এর remove() মেথডের মাধ্যমে Entity অবজেক্টটি ডেটাবেস থেকে মুছে দেওয়া হয় এবং এটি Removed অবস্থা লাভ করে। EntityManager এর remove() মেথডটি Entity অবজেক্টটি Managed অবস্থা থেকে Removed অবস্থায় পরিবর্তন করে এবং এটি ডেটাবেসে মুছে ফেলা হয়।

বৈশিষ্ট্য:

  • Entity অবজেক্টটি remove() মেথড দিয়ে ডেটাবেস থেকে মুছে ফেলা হয়েছে।
  • Removed অবস্থা EntityManager দ্বারা পরিচালিত হয়, কিন্তু এটি ডেটাবেসে আর সেভ থাকে না।
  • Entity অবজেক্টটি ডেটাবেসে আর উপস্থিত থাকে না।

উদাহরণ:

EntityManager em = entityManagerFactory.createEntityManager();
em.getTransaction().begin();

Person person = em.find(Person.class, 1);  // Managed State
em.remove(person);  // Removed State

em.getTransaction().commit();

এখানে, person EntityManager দ্বারা remove() মেথডের মাধ্যমে Removed অবস্থায় চলে গেছে এবং ডেটাবেস থেকে মুছে ফেলা হয়েছে।


সারাংশ


JPA Entity Lifecycle একটি Entity অবজেক্টের বিভিন্ন অবস্থা (State) বর্ণনা করে, এবং এরা হল:

  1. New: Entity অবজেক্টটি তৈরি করা হয়েছে, তবে এটি EntityManager দ্বারা ম্যানেজ করা হয়নি এবং ডেটাবেসে সেভ হয়নি।
  2. Managed: Entity অবজেক্টটি EntityManager দ্বারা পরিচালিত হচ্ছে এবং ডেটাবেসে সেভ হয়েছে।
  3. Detached: Entity অবজেক্টটি EntityManager থেকে বিচ্ছিন্ন হয়েছে, এবং EntityManager এর অধীনে আর কাজ করছে না।
  4. Removed: Entity অবজেক্টটি EntityManager এর মাধ্যমে ডেটাবেস থেকে মুছে ফেলা হয়েছে।

JPA এ EntityManager দ্বারা Entity অবজেক্টের জীবনচক্র পরিচালিত হয় এবং বিভিন্ন অবস্থা পরিবর্তন করতে persist(), merge(), remove(), detach() ইত্যাদি মেথড ব্যবহার করা হয়। Entity Lifecycle এর এই জ্ঞান জPA এর কার্যকারিতা এবং ডেটাবেস অপারেশন সহজতর করে।

Content added By
Promotion

Are you sure to start over?

Loading...