পৃষ্ঠাগুলির সাথে কাজ করা: সীমা এবং অফসেট৷

খুব প্রায়ই, একটি ডাটাবেস থেকে ডেটা "পৃষ্ঠাগুলিতে" পুনরুদ্ধার করা হয়। কারণ এভাবেই বড় তালিকার সাথে কাজ করা সুবিধাজনক। আমরা প্রথমে 1 থেকে 20 সারি, তারপর 21 থেকে 40 এবং আরও অনেক কিছু জিজ্ঞাসা করি।

এটি এমন একটি সাধারণ পরিস্থিতি যে এসকিউএল-এর এই সীমা এবং অফসেটের জন্য বিশেষ অপারেটর রয়েছে৷

এই অপারেটরগুলির অ্যানালগগুলি হাইবারনেটেও উপস্থিত রয়েছে। শুধুমাত্র তারা অবিলম্বে তাদের পৃথক পদ্ধতির আকারে তৈরি করার সিদ্ধান্ত নিয়েছে:

  • setFirstResult() OFFSET- এর অনুরূপ ।
  • setMaxResults() LIMIT-এর সাথে সাদৃশ্যপূর্ণ ।

এই পদ্ধতিগুলি ব্যবহার করে প্রশ্নগুলি লেখা খুব সহজ। আসুন একটি ক্যোয়ারী লিখি যেখানে আমরা 41টি থেকে শুরু করে 20টি কাজ ফেরত দিতে বলব৷ এটি দেখতে এইরকম হবে:

Query<EmployeeTask> query = session.createQuery( “from EmployeeTask, EmployeeTask.class);
query.setFirstResult(41);
query.setMaxResults(20);
List<EmployeeTask> resultLIst = query.list();

বাছাই ফলাফল

আমরা খুঁজে বের করেছি কিভাবে একটি প্রশ্নের ফলাফল স্ট্রিং এর অংশ পেতে হয়. পরবর্তী প্রেসিং সমস্যা বাছাই হয়.

হাইবারনেটে সাজানো সরাসরি HQL ক্যোয়ারীতে লেখা হয় এবং সাধারণত প্রত্যাশিত দেখায়:

from Employee order by joinDate

আপনি যদি সাজানোর ক্রম পরিবর্তন করতে চান, তাহলে আপনাকে পরিচিত শব্দ ব্যবহার করতে হবে: asc এবং desc। উদাহরণ:

from Employee order by joinDate desc

এসকিউএল-এর মতো, আপনি একাধিক ক্ষেত্র অনুসারে সাজাতে পারেন:

from Employee order by joinDate desc, name asc

উপরন্তু, সাজানোর ক্ষেত্র একটি পরামিতি হিসাবে পাস করা যেতে পারে:

String hql = "from EmployeeTask where employee.name = :username order by :ord";
Query<EmployeeTask> query = session.createQuery( hql, EmployeeTask.class);
query.setParameter(“username”, “Ivan Ivanovich”);
query.setParameter(“ord”, “name”);

List<EmployeeTask> resultLIst = query.list();

HQL এর কার্যাবলী

HQL-এ SQL-এর মতো, আপনি বিভিন্ন ফাংশন ব্যবহার করতে পারেন।

এখানে সমষ্টিগত ফাংশনগুলির একটি তালিকা রয়েছে যা HQL সমর্থন করে:

সমষ্টিগত ফাংশন বর্ণনা
গণনা() সারির সংখ্যা প্রদান করে
যোগফল() মানের যোগফল গণনা করে
মিনিট() সর্বনিম্ন মান প্রদান করে
সর্বোচ্চ() সর্বোচ্চ মান প্রদান করে
গড়() গড় ফেরত দেয়

আপনি আশা করি মনে রাখবেন, সমষ্টিগত ফাংশনগুলি হল যেগুলি দ্বারা গোষ্ঠীর সাথে একত্রে ব্যবহার করা যেতে পারে। গ্রুপ বাই SQL এর মতোই কাজ করে, তাই আমরা নিজেদের পুনরাবৃত্তি করব না।

এবং, অবশ্যই, স্বাভাবিক ফাংশন . সাধারণ ফাংশনগুলির সাথে, সবকিছুই অনেক সহজ - সেগুলি এসকিউএল সার্ভার দ্বারা সঞ্চালিত হয়, হাইবারনেটকে কেবল সেগুলি ব্যবহার করে সঠিকভাবে একটি ক্যোয়ারী তৈরি করতে হবে।

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

চলুন একজন ব্যবহারকারীকে নির্ধারিত কাজের সংখ্যা খুঁজে বের করা যাক:

String hql = "select count(*) from EmployeeTask where employee.name = :username ";
Query<Integer> query = session.createQuery( hql, Integer.class);
query.setParameter(“username”, “Ivan Ivanovich”);
Integer count = query.uniqueResult();