@Version Annotation এর মাধ্যমে Locking কনফিগার করা

Spring ORM এ Optimistic এবং Pessimistic Locking - স্প্রিং ওআরএম (Spring ORM) - Java Technologies

279

Spring ORM এবং Hibernate ব্যবহার করে ডাটাবেসের কনকারেন্সি (concurrency) ম্যানেজ করতে @Version অ্যানোটেশন একটি কার্যকরী উপায়। এটি Optimistic Locking বাস্তবায়নে ব্যবহৃত হয়, যা ডাটাবেসে মাল্টিপল ট্রানজ্যাকশনের সময় ডেটা কনসিস্টেন্সি বজায় রাখে।


Optimistic Locking এর ধারণা

Optimistic Locking একটি কৌশল যেখানে ডেটা রিড করার সময় ধরে নেওয়া হয় যে ডেটা অন্য কেউ পরিবর্তন করবে না। তবে, আপডেট করার সময় চেক করা হয় ডেটার সংস্করণ (version) পরিবর্তন হয়েছে কি না। যদি পরিবর্তন হয়ে থাকে, তাহলে কনফ্লিক্ট (conflict) ম্যানেজ করতে উপযুক্ত পদক্ষেপ নেওয়া হয়।


@Version Annotation এর ভূমিকা

  • Hibernate বা JPA-তে @Version ব্যবহার করে একটি টেবিলের নির্দিষ্ট কলামকে সংস্করণ (version) ট্র্যাক করার জন্য ব্যবহার করা হয়।
  • যখনই কোনও ডেটা আপডেট করা হয়, তখন এই সংস্করণ ফিল্ডটি স্বয়ংক্রিয়ভাবে ইনক্রিমেন্ট হয়।
  • ডেটার সংস্করণ চেক করার মাধ্যমে ডেটা কনসিস্টেন্সি নিশ্চিত করা হয়।

@Version ব্যবহার করার পদ্ধতি

1. Entity Class এ @Version যোগ করা

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Version;

@Entity
public class Product {

    @Id
    private int id;

    private String name;

    private double price;

    @Version
    private int version;

    // Getter এবং Setter
    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 getPrice() {
        return price;
    }

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

    public int getVersion() {
        return version;
    }

    public void setVersion(int version) {
        this.version = version;
    }
}

2. ডাটাবেসে @Version এর জন্য কলাম সংযোজন

টেবিলের জন্য একটি version বা অনুরূপ কলাম যুক্ত করুন। উদাহরণস্বরূপ:

ALTER TABLE Product ADD version INT DEFAULT 0;

Hibernate স্বয়ংক্রিয়ভাবে এই কলামের মান পরিচালনা করবে।


কাজের পদ্ধতি

  • যখন Hibernate বা JPA একটি Entity আপডেট করে, তখন এটি Entity-র বর্তমান সংস্করণ চেক করে।
  • যদি সংস্করণটি আগের মানের সঙ্গে মেলে, তাহলে আপডেট সফল হয় এবং সংস্করণ ইনক্রিমেন্ট করা হয়।
  • যদি সংস্করণ মেলে না (কারণ অন্য কোনো ট্রানজ্যাকশন ইতিমধ্যে আপডেট করেছে), তাহলে OptimisticLockException থ্রো করা হয়।

উদাহরণ: Optimistic Locking এর বাস্তবায়ন

ডেটা আপডেট

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;

public class ProductService {

    private EntityManagerFactory emf;

    public ProductService() {
        emf = Persistence.createEntityManagerFactory("example-unit");
    }

    public void updateProductPrice(int productId, double newPrice) {
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();

        try {
            Product product = em.find(Product.class, productId);
            product.setPrice(newPrice);

            em.getTransaction().commit();
        } catch (Exception e) {
            em.getTransaction().rollback();
            e.printStackTrace();
        } finally {
            em.close();
        }
    }
}

কনফ্লিক্ট ম্যানেজমেন্ট

যদি একই ডেটা দুইটি ট্রানজ্যাকশন দ্বারা আপডেট করা হয়, তাহলে একটি OptimisticLockException থ্রো হবে, যা নিচের মতো হ্যান্ডেল করা যেতে পারে:

try {
    updateProductPrice(1, 150.0);
} catch (OptimisticLockException e) {
    System.out.println("Concurrency issue detected! Please retry.");
}

সুবিধা

  1. ডেটা কনসিস্টেন্সি: একই ডেটা একাধিক ট্রানজ্যাকশনে কনফ্লিক্ট হওয়ার ঝুঁকি কমায়।
  2. লো রিসোর্স ওভারহেড: Optimistic Locking অতিরিক্ত লক রাখে না, ফলে এটি হালকা ওজনের।
  3. ব্যবহারের সরলতা: @Version অ্যানোটেশন ব্যবহার করে সহজেই কনফিগার করা যায়।

সীমাবদ্ধতা

  1. High Contention: যদি ডেটা খুব ঘন ঘন আপডেট হয়, তাহলে কনফ্লিক্টের সম্ভাবনা বেড়ে যায়।
  2. Rollback প্রয়োজন: কনফ্লিক্টের ক্ষেত্রে ট্রানজ্যাকশন রোলব্যাক করতে হতে পারে।
  3. ডেটা লস ঝুঁকি: কনফ্লিক্ট ম্যানেজমেন্ট সঠিকভাবে না করা হলে ডেটা লস হতে পারে।

Spring ORM-এ @Version অ্যানোটেশনের মাধ্যমে Optimistic Locking ব্যবহার করে মাল্টিপল ট্রানজ্যাকশন পরিচালনার সময় ডেটার অখণ্ডতা নিশ্চিত করা যায়। এটি একটি কার্যকর এবং ব্যবহার-বান্ধব কৌশল যা Spring ORM বা Hibernate-এর পারফরম্যান্স ও নির্ভরযোগ্যতা বৃদ্ধি করে।


Content added By
Promotion

Are you sure to start over?

Loading...