java - meaning - hibernate tutorial




হাইবারনেট খোলা অধিবেশন() বনাম কান্ট্রি সেশন() (3)

আমরা SessionFactory.openSession সম্পর্কে কথা বলতে হলে ()

  • এটি সর্বদা একটি নতুন সেশন অবজেক্ট তৈরি করে।
  • আপনি স্পষ্টভাবে ফ্লাশ এবং সেশন বস্তু বন্ধ করতে হবে।
  • একক থ্রেডেড পরিবেশে এটি getCurrentSession () থেকে ধীর।
  • আপনি এই পদ্ধতি কল করতে কোন সম্পত্তি কনফিগার করার প্রয়োজন নেই।

এবং যদি আমরা SessionFactory.getCurrentSession () সম্পর্কে কথা বলি

  • এটি উপস্থিত থাকলে একটি নতুন সেশন তৈরি করে, অন্যথা একই সেশনের ব্যবহার করে যা বর্তমান হাইবারনেট প্রসঙ্গে থাকে।
  • সেশন অবজেক্টগুলি ফ্লাশ এবং বন্ধ করার দরকার নেই, এটি স্বয়ংক্রিয়ভাবে হাইবারনেটকে অভ্যন্তরীণভাবে যত্ন নিতে হবে।
  • একক থ্রেড পরিবেশে এটি openSession () থেকে দ্রুত।
  • আপনি অতিরিক্ত সম্পত্তি কনফিগার করতে হবে। getCurrentSession () পদ্ধতিতে কল করতে "hibernate.current_session_context_class", অন্যথায় এটি একটি ব্যতিক্রম নিক্ষেপ করবে।

জেএসপি ওয়েব অ্যাপ্লিকেশনে হাইবারনেট ব্যবহার সম্পর্কে আমার কিছু প্রশ্ন আছে।

  1. hibernate.current_session_context_class এর মান কী হওয়া উচিত?

  2. তাহলে, নিম্নলিখিত বিবৃতিগুলির কোনটি ব্যবহার করা উচিত? এবং কেন?

     Session s = HibernateUtil.getSessionFactory().openSession();
     Session s = HibernateUtil.getSessionFactory().getCurrentSession()
  3. অবশেষে, কোনটি "ওয়েব অ্যাপ্লিকেশনের প্রতি এক সেশন" বা "অনুরোধ প্রতি এক সেশন" ভাল?


সেশন ফ্যাক্টরী: "ডেটাবেসে প্রতি অ্যাপ্লিকেশন একটি সেশনফ্যাক্টরি" (উদাহরণস্বরূপ, যদি আপনি আমাদের অ্যাপ্লিকেশনটিতে 3 ডেটাবেস ব্যবহার করেন তবে আপনাকে প্রতিটি ডিবিতে সেশন ফ্যাক্টরি অবজেক্ট তৈরি করতে হবে, সম্পূর্ণভাবে আপনাকে 3 টি সেশন ফ্যাক্টরি তৈরি করতে হবে। অথবা যদি আপনার কেবলমাত্র একটি ডেটাবেস এক সেশনফ্যাক্টিক থাকে যথেষ্ট)।

অধিবেশন: "এক অনুরোধ-প্রতিক্রিয়া চক্রের জন্য একটি অধিবেশন"। অনুরোধটি আসার সময় আপনি সেশন খুলতে পারেন এবং অনুরোধ প্রক্রিয়ার সমাপ্তির পরে আপনি সেশন বন্ধ করতে পারেন। নোট: ওয়েব অ্যাপ্লিকেশনের জন্য এক সেশন ব্যবহার করবেন না।


openSession SessionFactory.openSession : যখন আপনি openSession কল করেন, এটি সর্বদা একটি নতুন Session অবজেক্ট তৈরি করে এবং এটি আপনাকে দেয়।

আপনি স্পষ্টভাবে ফ্লাশ এবং এই সেশন অবজেক্ট বন্ধ করতে হবে।

সেশন অবজেক্টগুলি থ্রেড নিরাপদ নয়, আপনাকে মাল্টি-থ্রেড পরিবেশে প্রতি অনুরোধের জন্য একটি সেশন অবজেক্ট তৈরি করতে হবে এবং ওয়েব অ্যাপ্লিকেশনগুলিতে প্রতি অনুরোধের এক সেশনও তৈরি করতে হবে।

getCurrentSession : যখন আপনি getCurrentSession কল করবেন, তখন এটি আপনাকে সেশনের বস্তু সরবরাহ করবে যা হাইবারনেট প্রসঙ্গে এবং অভ্যন্তরীণভাবে হাইবারনেট দ্বারা পরিচালিত হবে। এটা লেনদেনের সুযোগ আবদ্ধ হয়।

যখন আপনি SessionFactory.getCurrentSession কল করেন, এটি উপস্থিত না থাকলে এটি একটি নতুন Session তৈরি করে, অন্যথায় একই SessionFactory.getCurrentSession ব্যবহার করুন যা বর্তমান হাইবারনেট প্রসঙ্গে রয়েছে। লেনদেন শেষ হওয়ার সময় এটি স্বয়ংক্রিয়ভাবে ফ্লাশ এবং বন্ধ করে দেয়, তাই আপনাকে এটি বাহ্যিকভাবে করতে হবে না।

আপনি যদি একক-থ্রেডেড পরিবেশে হাইবারনেট ব্যবহার করেন তবে আপনি getCurrentSession ব্যবহার করতে পারেন, কারণ এটি প্রতিটি সময় নতুন সেশন তৈরির তুলনায় কার্য সম্পাদনে দ্রুততর।

getCurrentSession পদ্ধতিটি ব্যবহার করার জন্য আপনাকে নিম্নোক্ত সম্পত্তিটি hibernate.cfg.xml এ যোগ করতে হবে:

<session-factory>
    <!--  Put other elements here -->
    <property name="hibernate.current_session_context_class">
          thread
    </property>
</session-factory>




hibernate