Entity Remove করা (Delete)

JPA তে CRUD অপারেশন - জেপিএ  (JPA) - Java Technologies

318

JPA (Java Persistence API) ডেটাবেসের সাথে Java অবজেক্টগুলোকে সম্পর্কিত করে এবং অবজেক্টের বিভিন্ন অপারেশন যেমন সেভ, আপডেট, ডিলিট (remove) ইত্যাদি পরিচালনা করতে সহায়তা করে। যখন JPA এর মাধ্যমে কোনো Entity (ডেটাবেস টেবিলের সারি) ডিলিট করতে হয়, তখন EntityManager এর remove() মেথড ব্যবহার করা হয়।

এই টিউটোরিয়ালে, আমরা JPA Entity ক্লাসের মাধ্যমে ডেটাবেসের ডেটা রিমুভ (ডিলিট) করার প্রক্রিয়া দেখাব।


1. Entity Remove (Delete) করার জন্য পদক্ষেপ

  1. EntityManager ব্যবহার করা: JPA Entity ডিলিট করতে EntityManager এর remove() মেথড ব্যবহার করা হয়।
  2. Transaction Management: ডেটাবেসের টেবিল থেকে ডেটা ডিলিট করতে ট্রানজেকশন পরিচালনা করা জরুরি। JPA তে @Transactional বা EntityManager ব্যবহার করে ম্যানুয়ালি ট্রানজেকশন পরিচালনা করা হয়।
  3. 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();
        }
    }
}

কোডের ব্যাখ্যা:

  1. EntityManager: EntityManager হল JPA এর মূল কম্পোনেন্ট যা ডেটাবেসে অবজেক্ট সেভ, আপডেট, এবং রিমুভ অপারেশন পরিচালনা করে।
  2. em.find(): find() মেথড ব্যবহার করে Person Entity কে ডেটাবেস থেকে তার ID এর মাধ্যমে খুঁজে বের করা হয়। যদি অবজেক্টটি পাওয়া যায়, তাহলে সেটি EntityManager তে সিলেক্ট করা হয়।
  3. em.remove(): remove() মেথড ব্যবহার করে অবজেক্টটি ডেটাবেস থেকে ডিলিট করা হয়। এখানে person অবজেক্টটি ডিলিট করা হচ্ছে।
  4. Transaction Management: ডেটাবেস অপারেশন করতে হলে transaction চালু করতে হয়। ট্রানজেকশন শুরু করার জন্য em.getTransaction().begin() এবং শেষ করার জন্য em.getTransaction().commit() ব্যবহার করা হয়।
  5. 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 গুলিও একসাথে ডিলিট করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...