Sobes.tech
Middle

Hibernate-ში ერთეულების მდგომარეობები რა არის?

sobes.tech AI

პასუხი AI-სგან

Hibernate-এ একটি সত্তা নিম্নলিখিত অবস্থা থাকতে পারে:

  • Transient (অস্থায়ী): অবজেক্টটি তৈরি করা হয়েছে, কিন্তু Hibernate সেশনটির সাথে সংযুক্ত নয়। এর কোনও ডেটাবেস উপস্থাপন নেই। এর উপর অপারেশনগুলি স্মৃতিতে সম্পন্ন হয়, কিন্তু ডেটাবেসে প্রভাব ফেলে না।

    // Student অবজেক্টটি তৈরি হয়েছে, কিন্তু সেশনের সাথে সংযুক্ত নয়
    Student student = new Student("Ivan", "Ivanov");
    
  • Persistent (স্থায়ী): অবজেক্টটি বর্তমান Hibernate সেশনের সাথে সংযুক্ত এবং এটি দ্বারা পরিচালিত। যে কোনও পরিবর্তন ট্রানজেকশনের কমিট বা সেশন ফ্লাশের সময় ডেটাবেসের সাথে সিঙ্ক্রোনাইজ হবে। সেশনের মাধ্যমে পড়া অবজেক্ট এই অবস্থানে থাকে।

    // Student অবজেক্টটি ডেটাবেস থেকে নেওয়া বা সংরক্ষিত
    Session session = sessionFactory.openSession();
    session.beginTransaction();
    
    Student student = new Student("Petr", "Petrov");
    session.save(student); // student এখন Persistent অবস্থা
    
    // বা
    // Student student = session.get(Student.class, 1L); // student Persistent অবস্থা
    
    session.getTransaction().commit();
    session.close();
    
  • Detached (বিচ্ছিন্ন): অবজেক্টটি পূর্বে সেশনের সাথে সংযুক্ত ছিল, কিন্তু সেশন বন্ধ হয়ে গেছে বা স্পষ্টভাবে বিচ্ছিন্ন করা হয়েছে (session.evict(object) এর মাধ্যমে)। অবজেক্টটি এখনও ডেটাবেসের তথ্য ধারণ করে, কিন্তু এর পরিবর্তন স্বয়ংক্রিয়ভাবে ডেটাবেসের সাথে সিঙ্ক্রোনাইজ হয় না। পরিবর্তন সংরক্ষণ করতে হলে অবজেক্টটিকে আবার অন্য সেশনের সাথে সংযুক্ত করতে হবে।

    Session session1 = sessionFactory.openSession();
    session1.beginTransaction();
    
    Student student = session1.get(Student.class, 1L); // Persistent
    session1.getTransaction().commit();
    session1.close(); // student এখন Detached
    
    // Detached অবস্থায় অবজেক্টের পরিবর্তন ডেটাবেসে প্রভাব ফেলবে না
    student.setName("নতুন নাম"); 
    
    // পরিবর্তন সংরক্ষণ করতে হলে এটি নতুন সেশনের সাথে সংযুক্ত করতে হবে
    Session session2 = sessionFactory.openSession();
    session2.beginTransaction();
    session2.update(student); // student আবার Persistent
    session2.getTransaction().commit();
    session2.close();
    

অবস্থা পরিবর্তনের পথ:

অবস্থা থেকে\অবস্থায় Transient Persistent Detached
Transient (থেকে যায়) save(), persist(), saveOrUpdate() (সরাসরি সম্ভব নয়)
Persistent (সরাসরি সম্ভব নয়) (থেকে যায়) close(), evict(), clear()
Detached (সরাসরি সম্ভব নয়) update(), merge(), saveOrUpdate() (থেকে যায়)