রাজ্যের তালিকা

এবং এখন মজা শুরু হয়. আমরা সত্তা বস্তুর অবস্থা অধ্যয়ন করব. আপনাকে সবকিছুর জন্য এবং হাইবারনেট ব্যবহারের জন্যও অর্থ প্রদান করতে হবে। আপনি কি মনে করেন না যে HQL শেখার একটি মূল্য? না, জীবনটা একটু বেশিই জটিল।

আপনার যদি এমন কিছু সত্তা বস্তু থাকে যা আপনি হাইবারনেট ব্যবহার করে ডাটাবেসে সংরক্ষণ করতে পারেন, তাহলে হাইবারনেটের দৃষ্টিকোণ থেকে, এই বস্তুটির চারটি অবস্থা থাকতে পারে:

  • ক্ষণস্থায়ী
  • অবিরাম (বা পরিচালিত)
  • বিচ্ছিন্ন
  • সরানো হয়েছে

এবং আপনার আগ্রহের জন্য, আমি এই বক্তৃতায় এই ছবিটি যুক্ত করব:

ক্ষণস্থায়ী

আসলে, সবকিছুই মনে হয় তার চেয়ে অনেক সহজ, যদিও সূক্ষ্মতা ছাড়া নয়। উদাহরণস্বরূপ, প্রতিটি সত্তা অবজেক্ট যা আপনি স্পষ্টভাবে জাভা কোড ব্যবহার করে তৈরি করেছেন এবং হাইবারনেট ব্যবহার করে ডাটাবেস থেকে লোড করেননি, একটি ক্ষণস্থায়ী (স্বচ্ছ) স্থিতি রয়েছে।

EmployeeEntity employee = new EmployeeEntity();

ক্ষণস্থায়ী অবস্থার মানে হল যে হাইবারনেটের এই বস্তু সম্পর্কে কোন ধারণা নেই, এবং বস্তুর উপর কোন ক্রিয়া হাইবারনেটকে প্রভাবিত করে না, বা এই বস্তুতে হাইবারনেটের কাজও হয় না।

এই ধরনের বস্তুগুলিকে POJO - প্লেইন ওল্ড জাভা অবজেক্টও বলা হয় । শব্দটি প্রায়ই চতুর আচরণ সহ বিভিন্ন বস্তুর বিপরীত হিসাবে ব্যবহৃত হয়। মকিটো তৈরি করা Moc অবজেক্টগুলি মনে রাখবেন? এখানে তারা পোজো নয়।

যদি কিছু ক্লায়েন্ট কোড ক্ষণস্থায়ী অবস্থা সহ একটি বস্তুর সাথে কাজ করে, তাহলে তাদের মিথস্ক্রিয়া একটি অতি-সাধারণ স্কিম দ্বারা বর্ণনা করা যেতে পারে:

স্থায়ী বা পরিচালিত

পরবর্তী সবচেয়ে সাধারণ ক্ষেত্রে হাইবারনেট ইঞ্জিন সম্পর্কিত বস্তু। তাদের অবস্থাকে বলা হয় স্থায়ী (বা পরিচালিত)। এই স্থিতি সহ একটি বস্তু পেতে ঠিক দুটি উপায় আছে:

  • হাইবারনেট থেকে অবজেক্ট লোড করুন।
  • হাইবারনেটে অবজেক্ট সেভ করুন।

উদাহরণ:

Employee employee = session.load(Employee.class, 1);
Employee employee = new Employee ();
session.save(employee);

এই ধরনের একটি বস্তু সাধারণত ডাটাবেসের কোনো ধরনের রেকর্ডের সাথে মিলে যায়, এটির একটি আইডি এবং এর মতো রয়েছে। এই অবজেক্টটি হাইবারনেট সেশনের সাথে সংযুক্ত, এবং সাধারণভাবে একটি বাস্তব বস্তু দ্বারা নয়, কিন্তু কিছু ধরণের প্রক্সি দ্বারা প্রতিনিধিত্ব করা যেতে পারে।

এটা খুবই সম্ভব যে session.load() পদ্ধতিতে কল করার পরে , আপনি কিছু স্টাব অবজেক্ট (প্রক্সি) ফিরে পাবেন এবং এই অবজেক্টের পদ্ধতিতে কল করার পরেই ডাটাবেসের সমস্ত কল করা হবে। কিন্তু আমরা এই ধরনের বিস্তারিত সম্পর্কে একটু পরে কথা বলব।

এবং ক্লায়েন্ট কোড এবং ম্যানেজড স্ট্যাটাসে থাকা বস্তুর মিথস্ক্রিয়া নিম্নলিখিত ছবির সাথে বর্ণনা করা যেতে পারে:

বিচ্ছিন্ন

পরবর্তী অবস্থা হল যখন বস্তুটি সেশন থেকে বিচ্ছিন্ন করা হয়েছে। অর্থাৎ, একবার হাইবারনেট সেশনের সাথে বস্তুটি সংযুক্ত ছিল, কিন্তু তারপর সেশনটি বন্ধ হয়ে গেছে বা লেনদেন শেষ হয়ে গেছে, এবং হাইবারনেট আর এই বস্তুটিকে নিরীক্ষণ করে না।

উদাহরণ:

session.close();
session.evict(entity);

প্রথম উদাহরণে, অধিবেশন বন্ধ ছিল. দ্বিতীয় ক্ষেত্রে, আমরা স্পষ্টভাবে ইঙ্গিত করেছি যে আমরা evict() পদ্ধতি ব্যবহার করে সেশন থেকে বস্তুটিকে বিচ্ছিন্ন করতে চাই ।

নতুন কোড-অবজেক্ট ইন্টারঅ্যাকশন স্কিমটি দেখতে এইরকম হবে:

এবং এখানে এটা আকর্ষণীয় পায় যেখানে. যদি আপনার বস্তুটি হাইবারনেট থেকে প্রাপ্ত হয়, তাহলে সম্ভবত আপনাকে একটি বাস্তব বস্তুর পরিবর্তে একটি প্রক্সি দেওয়া হয়েছে। এবং এই প্রক্সি অবজেক্ট, সেশন থেকে সংযোগ বিচ্ছিন্ন করার পরে, এর পদ্ধতিগুলি কল করা হলে ব্যতিক্রমগুলি নিক্ষেপ করবে৷

হাইবারনেটের সাথে কাজ করার সময় এটি সব নতুনদের জন্য সবচেয়ে সাধারণ সমস্যা। আপনি যখন কোনো এন্টিটি অবজেক্টের সাথে কাজ করছেন তখন আপনাকে এই ধরনের প্রশ্নের উত্তর সঠিকভাবে জানতে হবে :

  • আপনি একটি বাস্তব বস্তু বা একটি বাস্তব বস্তু থেকে শুধু একটি প্রক্সি আছে?
  • আপনি কি বর্তমানে একটি লেনদেনে আছেন নাকি?
  • এটি একটি পঠন-লিখতে লেনদেন বা শুধুমাত্র-পঠন লেনদেন?
  • বস্তুটি কি LazyLoading প্রক্রিয়া দ্বারা পরিচালিত হয়?
  • বস্তুর কোন অংশগুলি ইতিমধ্যে মেমরিতে লোড করা হয়েছে এবং অ্যাক্সেস করার সময় কোন অংশগুলি লোড হবে?
  • কিভাবে আপনার বস্তু নির্ভরশীল বস্তুর সাথে সংযুক্ত?

ভাল খবর হল যে বেশিরভাগ সময় এটি সুস্পষ্ট। কিন্তু আপনি এখনও বুঝতে হবে কিভাবে এটি সব হুড অধীনে কাজ করে। ঘোষণামূলক প্রোগ্রামিং এটি কি - আপনি 10 মিনিটের মধ্যে কোড লিখতে পারেন, বুঝতে পারেন যে এটি কেন কাজ করে না - 10 ঘন্টার মধ্যে :)

সরানো হয়েছে

এবং আপনার সত্তা অবজেক্টের শেষ অবস্থাটি সরানো হয়েছে। আপনি সম্ভবত ইতিমধ্যে এর নাম থেকে অনুমান করেছেন, এটি একটি দূরবর্তী বস্তুর অবস্থা।

এই অবস্থাটি এই কারণে প্রদর্শিত হয় যে আপনি যদি ডাটাবেস থেকে কিছু অবজেক্ট মুছে ফেলেন, তাহলে জাভা অবজেক্ট অবিলম্বে কোথাও অদৃশ্য হয়ে যাবে না।

Employee employee = session.load(Employee.class, 1);
//after loading the object's state is Persisted

session.remove(employee);
//after deletion, the state of the object is Removed

session.save(employee);
//and now Persisted again

session.close();
//and now the Detached state