Lifecycle Events এর মাধ্যমে Entity এর উপর বিভিন্ন অপারেশন পরিচালনা

Entity Listeners এবং Callbacks - জেপিএ  (JPA) - Java Technologies

272

JPA (Java Persistence API) Entity এর জীবনচক্রের বিভিন্ন পর্যায়ে বিশেষ অপারেশন এবং কার্যক্রম পরিচালনা করতে সক্ষম। এটি Entity এর সৃষ্টির আগে এবং পরে, ডাটাবেসে সেভ হওয়া, আপডেট হওয়া বা মুছে ফেলার আগে ও পরে বিভিন্ন ইভেন্ট ট্রিগার করে। এই ইভেন্টগুলো হল Lifecycle Events, যা Entity তে কিছু নির্দিষ্ট কাজের আগে বা পরে চলতে পারে।

Lifecycle Events Overview

JPA Entity Lifecycle Events সাধারণত Callback Methods হিসেবে পরিচিত। এগুলো কিছু নির্দিষ্ট মেথড যা Entity এর জীবনচক্রের বিভিন্ন পর্যায়ে (যেমন, Entity তৈরি, persist, update, remove) ট্রিগার হয়। এই মেথডগুলো @PrePersist, @PostPersist, @PreUpdate, @PostUpdate, @PreRemove, এবং @PostRemove অ্যানোটেশন দ্বারা চিহ্নিত করা হয়।

Entity Lifecycle Event এর ধাপসমূহ


  1. @PrePersist: Entity অবজেক্টটি ডেটাবেসে সেভ হওয়ার আগে ট্রিগার হয়। সাধারণত এখানে Entity অবজেক্টের প্রাথমিক সেটিংস বা প্রস্তুতি নেওয়া হয়।
  2. @PostPersist: Entity অবজেক্টটি ডেটাবেসে সেভ হওয়ার পরে ট্রিগার হয়।
  3. @PreUpdate: Entity অবজেক্টটি আপডেট হওয়ার আগে ট্রিগার হয়।
  4. @PostUpdate: Entity অবজেক্টটি আপডেট হওয়ার পরে ট্রিগার হয়।
  5. @PreRemove: Entity অবজেক্টটি ডিলিট হওয়ার আগে ট্রিগার হয়।
  6. @PostRemove: Entity অবজেক্টটি ডিলিট হওয়ার পরে ট্রিগার হয়।
  7. @PostLoad: Entity অবজেক্টটি ডেটাবেস থেকে লোড হওয়ার পরে ট্রিগার হয়।

Callback Methods এর উদাহরণ

1. @PrePersist এবং @PostPersist

এখন আমরা একটি Entity তে @PrePersist এবং @PostPersist ব্যবহারের মাধ্যমে Entity তৈরির আগে এবং পরে কিছু অপারেশন সম্পন্ন করার উদাহরণ দেখব।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.PrePersist;
import javax.persistence.PostPersist;

@Entity
public class Product {

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

    @PrePersist
    public void beforePersist() {
        // Do something before persisting the entity
        System.out.println("Before Persist: Product is about to be persisted");
    }

    @PostPersist
    public void afterPersist() {
        // Do something after persisting the entity
        System.out.println("After Persist: Product has been persisted");
    }

    // Getters and Setters
}

Explanation:

  • @PrePersist: এটি beforePersist মেথডটি Entity Product সেভ হওয়ার আগে ট্রিগার করবে।
  • @PostPersist: এটি afterPersist মেথডটি Entity সেভ হওয়ার পরে ট্রিগার করবে।

2. @PreUpdate এবং @PostUpdate

এই ইভেন্টগুলো Entity আপডেট হওয়ার আগে এবং পরে ট্রিগার হয়। এটি সাধারণত ডেটা পরিবর্তন করার পূর্বে বা পরে কোনো প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয়।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.PreUpdate;
import javax.persistence.PostUpdate;

@Entity
public class Product {

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

    @PreUpdate
    public void beforeUpdate() {
        // Do something before updating the entity
        System.out.println("Before Update: Product is about to be updated");
    }

    @PostUpdate
    public void afterUpdate() {
        // Do something after updating the entity
        System.out.println("After Update: Product has been updated");
    }

    // Getters and Setters
}

Explanation:

  • @PreUpdate: এটি beforeUpdate মেথডটি Entity আপডেট হওয়ার আগে ট্রিগার করবে।
  • @PostUpdate: এটি afterUpdate মেথডটি Entity আপডেট হওয়ার পরে ট্রিগার করবে।

3. @PreRemove এবং @PostRemove

@PreRemove এবং @PostRemove ইভেন্টগুলো Entity মুছে ফেলার আগে এবং পরে ট্রিগার হয়। এগুলো Entity ডিলিট হওয়ার পূর্বে এবং পরে কিছু প্রক্রিয়া চালানোর জন্য ব্যবহৃত হয়।

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.PreRemove;
import javax.persistence.PostRemove;

@Entity
public class Product {

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

    @PreRemove
    public void beforeRemove() {
        // Do something before removing the entity
        System.out.println("Before Remove: Product is about to be removed");
    }

    @PostRemove
    public void afterRemove() {
        // Do something after removing the entity
        System.out.println("After Remove: Product has been removed");
    }

    // Getters and Setters
}

Explanation:

  • @PreRemove: এটি beforeRemove মেথডটি Entity মুছে ফেলার আগে ট্রিগার করবে।
  • @PostRemove: এটি afterRemove মেথডটি Entity মুছে ফেলার পরে ট্রিগার করবে।

4. @PostLoad

এই ইভেন্টটি তখন ট্রিগার হয় যখন Entity ডেটাবেস থেকে লোড করা হয়। এটি সাধারণত Entity এর উপর কিছু প্রক্রিয়া শুরু করার জন্য ব্যবহৃত হয়, যেমন কিছু ফিল্ড আপডেট করা বা লগিং।

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

@Entity
public class Product {

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

    @PostLoad
    public void afterLoad() {
        // Do something after loading the entity
        System.out.println("After Load: Product has been loaded from the database");
    }

    // Getters and Setters
}

Explanation:

  • @PostLoad: এটি afterLoad মেথডটি Entity ডেটাবেস থেকে লোড হওয়ার পরে ট্রিগার করবে।

Entity Lifecycle Management with @EntityListeners

JPA তে, আপনি একটি listener class তৈরি করতে পারেন যা Entity এর lifecycle events এর জন্য ইভেন্ট হ্যান্ডলার হিসেবে কাজ করবে। আপনি @EntityListeners অ্যানোটেশন ব্যবহার করে একটি listener ক্লাস যুক্ত করতে পারেন।

@EntityListeners উদাহরণ:

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.EntityListeners;
import javax.persistence.PrePersist;

@Entity
@EntityListeners(ProductListener.class)
public class Product {

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

    // Getters and Setters
}
import javax.persistence.PrePersist;

public class ProductListener {

    @PrePersist
    public void beforePersist(Product product) {
        // Perform actions before Product entity is persisted
        System.out.println("Listener: Before Persisting Product - " + product.getName());
    }
}

Explanation:

  • @EntityListeners(ProductListener.class): এটি Entity এর ProductListener ক্লাসের মেথডগুলোকে ট্রিগার করবে।
  • @PrePersist: Listener ক্লাসে beforePersist মেথডটি Entity সেভ হওয়ার আগে ট্রিগার হবে।

সারাংশ


JPA Lifecycle Events এবং Callback Methods JPA Entity এর lifecycle এর বিভিন্ন পর্যায়ে Entity উপর অপারেশন পরিচালনা করতে ব্যবহৃত হয়। আপনি @PrePersist, @PostPersist, @PreUpdate, @PostUpdate, @PreRemove, @PostRemove, এবং @PostLoad অ্যানোটেশন ব্যবহার করে Entity এর সৃষ্টির আগে, আপডেটের আগে, ডিলিটের আগে, অথবা Entity লোড হওয়ার পরে কিছু কাস্টম কার্যক্রম সম্পাদন করতে পারেন।

  • @PrePersist: Entity সেভ হওয়ার আগে
  • @PostPersist: Entity সেভ হওয়ার পরে
  • @PreUpdate: Entity আপডেট হওয়ার আগে
  • @PostUpdate: Entity আপডেট হওয়ার পরে
  • @PreRemove: Entity ডিলিট হওয়ার আগে
  • @PostRemove: Entity ডিলিট হওয়ার পরে
  • @PostLoad: Entity লোড হওয়ার পরে

এগুলি ব্যবহারের মাধ্যমে আপনি আপনার Entity-এর lifecycle events এর উপর ভিত্তি করে ডেটাবেসের অপারেশনগুলি আরও কার্যকরীভাবে পরিচালনা করতে পারেন।

Content added By
Promotion

Are you sure to start over?

Loading...