JPA (Java Persistence API) ডেটাবেসের সাথে Java অবজেক্টগুলোকে সম্পর্কিত করে এবং অবজেক্টের বিভিন্ন অপারেশন যেমন সেভ, আপডেট, ডিলিট (remove) ইত্যাদি পরিচালনা করতে সহায়তা করে। যখন JPA এর মাধ্যমে কোনো Entity (ডেটাবেস টেবিলের সারি) ডিলিট করতে হয়, তখন EntityManager এর remove() মেথড ব্যবহার করা হয়।
এই টিউটোরিয়ালে, আমরা JPA Entity ক্লাসের মাধ্যমে ডেটাবেসের ডেটা রিমুভ (ডিলিট) করার প্রক্রিয়া দেখাব।
1. Entity Remove (Delete) করার জন্য পদক্ষেপ
- EntityManager ব্যবহার করা: JPA Entity ডিলিট করতে
EntityManagerএর remove() মেথড ব্যবহার করা হয়। - Transaction Management: ডেটাবেসের টেবিল থেকে ডেটা ডিলিট করতে ট্রানজেকশন পরিচালনা করা জরুরি। JPA তে @Transactional বা EntityManager ব্যবহার করে ম্যানুয়ালি ট্রানজেকশন পরিচালনা করা হয়।
- find() মেথড ব্যবহার: প্রথমে
find()মেথডের মাধ্যমে Entity ডাটাবেস থেকে ফেচ করা হয় এবং তারপরremove()মেথডে সেই Entity পাঠানো হয়।
2. Entity Remove (Delete) করার উদাহরণ
ধরা যাক, একটি Person Entity আছে এবং আপনি একটি নির্দিষ্ট Person অবজেক্টকে ডেটাবেস থেকে ডিলিট করতে চান। নিচে EntityManager ব্যবহার করে Person Entity ডিলিট করার প্রক্রিয়া দেখানো হলো।
Person Entity (Entity ক্লাস)
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Person {
@Id
private Long id;
private String name;
private int age;
// Getters and Setters
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
এখানে Person Entity ক্লাসটি JPA Entity হিসেবে চিহ্নিত করা হয়েছে। এতে একটি name এবং age প্রপার্টি রয়েছে।
Entity Remove (Delete) করার কোড
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class PersonDeleteExample {
public static void main(String[] args) {
// Create EntityManagerFactory and EntityManager
EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJpaUnit");
EntityManager em = emf.createEntityManager();
// Begin transaction
em.getTransaction().begin();
try {
// Find the person entity by its ID
Long personId = 1L; // ID of the person to delete
Person person = em.find(Person.class, personId);
if (person != null) {
// Remove the person entity from the database
em.remove(person);
System.out.println("Person with ID " + personId + " deleted successfully.");
} else {
System.out.println("Person not found with ID " + personId);
}
// Commit the transaction
em.getTransaction().commit();
} catch (Exception e) {
e.printStackTrace();
em.getTransaction().rollback(); // Rollback if an error occurs
} finally {
em.close();
emf.close();
}
}
}
কোডের ব্যাখ্যা:
- EntityManager:
EntityManagerহল JPA এর মূল কম্পোনেন্ট যা ডেটাবেসে অবজেক্ট সেভ, আপডেট, এবং রিমুভ অপারেশন পরিচালনা করে। - em.find():
find()মেথড ব্যবহার করেPersonEntity কে ডেটাবেস থেকে তার ID এর মাধ্যমে খুঁজে বের করা হয়। যদি অবজেক্টটি পাওয়া যায়, তাহলে সেটি EntityManager তে সিলেক্ট করা হয়। - em.remove():
remove()মেথড ব্যবহার করে অবজেক্টটি ডেটাবেস থেকে ডিলিট করা হয়। এখানেpersonঅবজেক্টটি ডিলিট করা হচ্ছে। - Transaction Management: ডেটাবেস অপারেশন করতে হলে transaction চালু করতে হয়। ট্রানজেকশন শুরু করার জন্য
em.getTransaction().begin()এবং শেষ করার জন্যem.getTransaction().commit()ব্যবহার করা হয়। - Exception Handling: কোনো ত্রুটি ঘটলে ট্রানজেকশনটি রোলব্যাক করা হয়, যাতে ডেটাবেসের ডেটা অখণ্ড থাকে।
3. Entity Delete করতে @Transactional অ্যানোটেশন ব্যবহার
যদি আপনি Spring বা Spring Boot এর মতো ফ্রেমওয়ার্ক ব্যবহার করেন, তাহলে আপনি @Transactional অ্যানোটেশন ব্যবহার করতে পারেন ট্রানজেকশন ম্যানেজমেন্ট স্বয়ংক্রিয়ভাবে পরিচালনা করতে।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class PersonService {
@Autowired
private PersonRepository personRepository;
@Transactional
public void deletePerson(Long id) {
Person person = personRepository.findById(id).orElse(null);
if (person != null) {
personRepository.delete(person);
System.out.println("Person with ID " + id + " deleted successfully.");
} else {
System.out.println("Person not found with ID " + id);
}
}
}
এখানে:
@Transactionalঅ্যানোটেশনটি ব্যবহার করা হয়েছে যাতে ট্রানজেকশন স্বয়ংক্রিয়ভাবে শুরু এবং শেষ হয়।
4. Cascade Operation: Entity Relationship এ Delete
যখন আপনি দুটি Entity এর মধ্যে সম্পর্ক (যেমন OneToMany বা ManyToOne) ব্যবহার করেন, তখন আপনি Cascade অপারেশন ব্যবহার করে সম্পর্কিত Entity গুলোও একসাথে ডিলিট করতে পারেন।
Example: OneToMany Cascade Delete
import javax.persistence.*;
import java.util.List;
@Entity
public class Department {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "department", cascade = CascadeType.ALL, orphanRemoval = true)
private List<Employee> employees;
// Getters and Setters
}
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
// Getters and Setters
}
এখানে, CascadeType.ALL ব্যবহারের মাধ্যমে যদি Department Entity ডিলিট করা হয়, তাহলে তার সম্পর্কিত Employee গুলোও স্বয়ংক্রিয়ভাবে ডিলিট হবে।
সারাংশ
JPA তে remove() মেথড ব্যবহার করে Entity (ডেটাবেস টেবিলের সারি) ডিলিট করা সম্ভব। যখন ডেটা ডিলিট করতে হয়, তখন প্রথমে EntityManager দিয়ে Entity খুঁজে বের করে, তারপর remove() মেথড দিয়ে তা ডেটাবেস থেকে মুছে ফেলা হয়। যদি Spring ফ্রেমওয়ার্ক ব্যবহার করেন, তাহলে @Transactional অ্যানোটেশন ব্যবহার করে ট্রানজেকশন পরিচালনা করা সহজ হয়। এছাড়াও Cascade অপারেশন ব্যবহার করে সম্পর্কিত Entity গুলিও একসাথে ডিলিট করা সম্ভব।
Read more