Entity Update এবং Merge করা (Update)

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

372

JPA (Java Persistence API) ব্যবহারের মাধ্যমে ডেটাবেসের Entity অবজেক্ট আপডেট করা একটি গুরুত্বপূর্ণ অংশ। JPA-তে Entity আপডেট করার দুটি প্রধান উপায় আছে: update এবং merge। দুটি পদ্ধতির মধ্যকার পার্থক্য এবং কখন কোনটি ব্যবহার করতে হবে, তা বোঝা খুবই গুরুত্বপূর্ণ।

এখানে আমরা update এবং merge সম্পর্কে বিস্তারিত আলোচনা করব এবং তাদের ব্যবহার কিভাবে করা হয় তা দেখাবো।


১. Entity Update: EntityManager এর মাধ্যমে Entity কে আপডেট করা

JPA তে EntityManager ব্যবহার করে Entity আপডেট করা যায়। কিন্তু, এটি শুধুমাত্র তখনই কাজ করবে যখন Entity অবজেক্ট ডাটাবেসে পূর্বেই উপস্থিত থাকে এবং তার ID মান প্রথমে সেভ করা হয়। update পদ্ধতি কার্যকরীভাবে Entity-কে ডাটাবেসে আপডেট করবে।

Entity Update Example (Update)

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityTransaction;

public class UpdateEntityExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // Start a transaction
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        
        // Find an existing entity by ID
        Person person = em.find(Person.class, 1L); // Assuming ID is 1
        
        // Update the entity
        if (person != null) {
            person.setName("Updated Name");
            person.setAge(40);  // Update the entity attributes
            em.merge(person);   // Persist the changes
        }
        
        // Commit the transaction
        transaction.commit();
        
        // Close the EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Explanation:

  • em.find(): এটি EntityManager ব্যবহার করে ডাটাবেস থেকে একটি বিদ্যমান Entity খুঁজে বের করে।
  • em.merge(): এটি Entity অবজেক্টের মধ্যে করা পরিবর্তনগুলি ডাটাবেসে সংরক্ষণ করে।

এটি তখন কাজ করবে যখন Entity অবজেক্টের ID ডাটাবেসে বিদ্যমান থাকে।


২. Entity Merge: Entity কে Merge করা

merge() পদ্ধতিটি নতুন Entity তৈরি না করে বিদ্যমান Entity অবজেক্টের ডেটা মিশ্রিত (merge) করে ডাটাবেসের সাথে। এটি তখন ব্যবহৃত হয় যখন Entity অবজেক্টে কিছু পরিবর্তন করা হয়, কিন্তু তা EntityManager-এর মধ্যে পরিষ্কারভাবে থাকে না।

merge() ব্যবহার করার সময়:

  • এটি টেম্পোরারি (detached) অবস্থা থেকে Entity কে পেরম্যানেন্ট (attached) অবস্থায় নিয়ে আসে।
  • আপনি merge() ব্যবহার করতে পারেন, যখন Entity অবজেক্ট পরিবর্তিত হয় কিন্তু আপনি এটি EntityManager-এ প্রথমে না অ্যাটাচ করেন।

Entity Merge Example

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.EntityTransaction;

public class MergeEntityExample {
    public static void main(String[] args) {
        // Create EntityManagerFactory and EntityManager
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("myJPAUnit");
        EntityManager em = emf.createEntityManager();
        
        // Start a transaction
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        
        // Find an existing entity by ID (detached state)
        Person person = em.find(Person.class, 1L);
        em.detach(person); // Detach the entity, making it in a detached state
        
        // Modify the entity's properties
        if (person != null) {
            person.setName("Merged Name");
            person.setAge(45); // Modify data
        }
        
        // Merge the detached entity to bring it back to managed state
        em.merge(person); // Merge the changes back into the database
        
        // Commit the transaction
        transaction.commit();
        
        // Close the EntityManager and EntityManagerFactory
        em.close();
        emf.close();
    }
}

Explanation:

  • em.detach(): এটি Entity কে detached অবস্থায় নিয়ে যায়, যার মানে হল যে এটি EntityManager এর সাথে আর সংযুক্ত থাকে না।
  • em.merge(): এটিতে detached অবস্থায় থাকা Entity কে আবার attached করে এবং পরিবর্তিত ডেটা ডাটাবেসে সেভ করা হয়।

merge() প্রক্রিয়া new entities এবং detached entities দুটোর ক্ষেত্রেই ব্যবহৃত হতে পারে।


৩. update এবং merge এর মধ্যে পার্থক্য

Featureupdate()merge()
Entity Stateশুধুমাত্র managed Entity-র জন্য কাজ করেdetached বা new Entity এর জন্য কাজ করে
Transaction ManagementEntityManager থেকে সরাসরি ডেটা সেভ করতে ব্যবহৃত হয়EntityManager-এর সাথে ম্যানেজড অবস্থা তৈরি করা হয়
UsageEntity ডাটাবেসে directly আপডেট করার জন্য ব্যবহারDetached Entity এর ডেটা ডাটাবেসে reconnect করার জন্য ব্যবহার
Behavior on Non-existing EntityEntity বিদ্যমান না থাকলে কাজ করবে নানতুন Entity তৈরি হবে (কারণ এটি merge)

৪. Performance Consideration (পারফরম্যান্স বিবেচনা)

  • merge() ব্যবহার করার সময় কিছু অতিরিক্ত কাজ হতে পারে কারণ এটি detached entity কে attached entity তে রূপান্তরিত করে। তবে, এটি নিরাপদ কারণ এটি সারা অবজেক্টের জন্য commit করে।
  • update() অপেক্ষাকৃত দ্রুত, কারণ এটি শুধুমাত্র managed entity নিয়ে কাজ করে, কিন্তু এটি non-existing entity তে কাজ করে না।

৫. JPA - Entity Update Best Practices

  • Detached Entity: merge() যখন Entity detached হয়ে যায় তখন তার পরিবর্তনগুলো ডাটাবেসে ফেরত প্রেরণ করে। এটি তখন ব্যবহার করুন যখন আপনার Entity আগে থেকেই EntityManager-এর সাথে সংযুক্ত ছিল না।
  • Managed Entity: EntityManager-এ যদি Entity সংযুক্ত থাকে তবে update() পদ্ধতিটি ব্যবহার করা উচিত, কারণ এটি দ্রুত এবং কার্যকরী।
  • Transaction Handling: যে কোনো পরিবর্তন ডাটাবেসে করার সময় আপনার transaction নিশ্চিত করুন। যদি আপনি merge() বা update() ব্যবহার করেন, তবে transaction.begin() এবং transaction.commit() ব্যবহার করুন।

সারাংশ


JPA-তে Entity Update এবং Merge দুটি আলাদা পদ্ধতি, যা EntityManager-এর মাধ্যমে Entity এর ডেটাবেসে পরিবর্তন করার জন্য ব্যবহৃত হয়। update() ব্যবহৃত হয় যখন Entity managed থাকে এবং ডেটা directly আপডেট করতে হয়, whereas merge() ব্যবহৃত হয় detached বা new entities এর জন্য, যেখানে এটি Entity কে attached অবস্থায় নিয়ে আসে এবং ডেটাবেসে সেভ করে।

merge() আরও নিরাপদ এবং নমনীয়, কারণ এটি detached অবস্থা থেকে Entity-কে পুনরায় সঠিকভাবে রূপান্তরিত করতে সাহায্য করে। update() দ্রুত এবং সরাসরি ডেটাবেসের সঙ্গে সংযুক্ত Entity আপডেট করতে ব্যবহৃত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...