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() |
(থেকে যায়) |