JPA (Java Persistence API) তে EntityListeners এর মাধ্যমে আপনি Entity এর lifecycle-এ callbacks পরিচালনা করতে পারেন। যখন একটি Entity-এর জীবনচক্রে কোন ইভেন্ট (যেমন, persist, update, remove) ঘটে, তখন EntityListeners ব্যবহার করে আপনি এই ইভেন্টগুলিতে কাস্টম লজিক প্রয়োগ করতে পারেন। JPA এর callbacks আপনি EntityListener অথবা @PrePersist, @PostPersist, @PreUpdate, @PostUpdate, @PreRemove, @PostRemove, @PostLoad অ্যানোটেশনগুলির মাধ্যমে হ্যান্ডেল করতে পারেন।
Entity Callbacks
Entity Callbacks হল ডেটাবেসের Entity এর lifecycle ইভেন্টগুলির জন্য ডিফাইন করা hook methods। এই methods গুলো বিভিন্ন ইভেন্ট ট্রিগার করার সময় Entity এর উপর কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, Entity এর মধ্যে ডেটা সেভ করার আগে বা পরে কিছু প্রক্রিয়া সম্পন্ন করা।
JPA-তে সাধারণত নিম্নলিখিত ধরনের callback ইভেন্ট থাকে:
- @PrePersist: Entity persist হওয়ার আগে।
- @PostPersist: Entity persist হওয়ার পরে।
- @PreUpdate: Entity update হওয়ার আগে।
- @PostUpdate: Entity update হওয়ার পরে।
- @PreRemove: Entity remove হওয়ার আগে।
- @PostRemove: Entity remove হওয়ার পরে।
- @PostLoad: Entity load হওয়ার পরে।
EntityListener
EntityListener একটি ক্লাস যা JPA Entity এর lifecycle ইভেন্টগুলির জন্য callback methods হ্যান্ডেল করে। EntityListener কাস্টম কন্ট্রোলারের মতো কাজ করে এবং Entity তে বিভিন্ন কার্যাবলী সম্পাদন করার সুযোগ প্রদান করে।
JPA Entity তে EntityListener ব্যবহারের মাধ্যমে আপনি lifecycle ইভেন্টে callback মেথডগুলো কার্যকরী করতে পারেন, যেমন Entity persist, remove বা update করার আগে বা পরে কিছু নির্দিষ্ট কাজ সম্পন্ন করা।
EntityListener ব্যবহার করার উদাহরণ:
ধরা যাক, আমাদের একটি Employee Entity এবং তার সাথে একটি EntityListener ক্লাস রয়েছে, যা @PrePersist এবং @PostPersist callback ব্যবহারের মাধ্যমে কিছু অতিরিক্ত লজিক প্রয়োগ করবে।
১. EntityListener ব্যবহার করে Callback হ্যান্ডলিং
Employee Entity:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.EntityListeners;
@Entity
@EntityListeners(EmployeeListener.class)
public class Employee {
@Id
private int id;
private String name;
private double salary;
// Getters and Setters
}
এখানে, @EntityListeners অ্যানোটেশন দিয়ে EmployeeListener ক্লাসটি Employee Entity এর জন্য Entity Listener হিসেবে নির্ধারণ করা হয়েছে।
EmployeeListener:
import javax.persistence.PrePersist;
import javax.persistence.PostPersist;
public class EmployeeListener {
@PrePersist
public void prePersist(Employee employee) {
System.out.println("Before Persisting: " + employee.getName());
// You can add custom logic before saving the entity, like modifying some fields
}
@PostPersist
public void postPersist(Employee employee) {
System.out.println("After Persisting: " + employee.getName());
// You can add custom logic after saving the entity, like sending notifications
}
}
এখানে:
- @PrePersist:
prePersistমেথডটি Employee Entity persist হওয়ার আগে কল হয়। এটি আপনাকে Entity সেভ হওয়ার আগে কিছু অতিরিক্ত লজিক প্রয়োগ করতে সাহায্য করে। - @PostPersist:
postPersistমেথডটি Employee Entity persist হওয়ার পরে কল হয়। এখানে আপনি Entity সেভ হওয়ার পরের প্রক্রিয়া পরিচালনা করতে পারেন।
EntityManager ব্যবহার করে Entity persist করা:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EmployeeService {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJpaUnit");
EntityManager em = emf.createEntityManager();
em.getTransaction().begin();
Employee employee = new Employee();
employee.setId(1);
employee.setName("John Doe");
employee.setSalary(50000);
em.persist(employee); // Calling persist() triggers the callbacks
em.getTransaction().commit();
em.close();
emf.close();
}
}
এখানে:
em.persist(employee)কল করলে,EmployeeListenerএর @PrePersist এবং @PostPersist callback মেথডগুলি কার্যকর হবে।
২. Entity Callbacks: অন্যান্য Lifecycle Methods
এছাড়া, @PreUpdate, @PostUpdate, @PreRemove, @PostRemove, এবং @PostLoad মেথডগুলি ব্যবহার করে Entity এর lifecycle বিভিন্ন স্টেজে কাস্টম লজিক প্রয়োগ করা যেতে পারে।
@PreUpdate এবং @PostUpdate উদাহরণ:
import javax.persistence.PreUpdate;
import javax.persistence.PostUpdate;
public class EmployeeListener {
@PreUpdate
public void preUpdate(Employee employee) {
System.out.println("Before Updating: " + employee.getName());
// Add logic before updating the entity
}
@PostUpdate
public void postUpdate(Employee employee) {
System.out.println("After Updating: " + employee.getName());
// Add logic after updating the entity
}
}
@PreRemove এবং @PostRemove উদাহরণ:
import javax.persistence.PreRemove;
import javax.persistence.PostRemove;
public class EmployeeListener {
@PreRemove
public void preRemove(Employee employee) {
System.out.println("Before Removing: " + employee.getName());
// Add logic before removing the entity
}
@PostRemove
public void postRemove(Employee employee) {
System.out.println("After Removing: " + employee.getName());
// Add logic after removing the entity
}
}
@PostLoad উদাহরণ:
import javax.persistence.PostLoad;
public class EmployeeListener {
@PostLoad
public void postLoad(Employee employee) {
System.out.println("After Loading: " + employee.getName());
// Add logic after loading the entity from the database
}
}
সারাংশ
EntityListeners JPA এর মাধ্যমে Entity lifecycle-এ callbacks হ্যান্ডল করার একটি শক্তিশালী উপায়। @PrePersist, @PostPersist, @PreUpdate, @PostUpdate, @PreRemove, @PostRemove, এবং @PostLoad অ্যানোটেশনগুলি Entity এর lifecycle এর বিভিন্ন স্টেজে কাস্টম লজিক প্রয়োগ করতে সহায়তা করে। EntityListener ক্লাসের মাধ্যমে, আপনি Entity এর বিভিন্ন ইভেন্টে, যেমন persist, update, remove, এবং load, নির্দিষ্ট কার্যকলাপ সঞ্চালন করতে পারেন।
EntityListeners ব্যবহারের মাধ্যমে, আপনি ডেটাবেসে কোনো Entity সংরক্ষণ, আপডেট বা মুছে ফেলার আগে এবং পরে লজিক প্রয়োগ করতে পারেন, যা অ্যাপ্লিকেশন এর কার্যকারিতা এবং ফ্লেক্সিবিলিটি বাড়ায়।
Read more