6.1 নামযুক্ত প্রশ্ন

হাইবারনেট আপনাকে কোডে সরাসরি প্রশ্নগুলি সংরক্ষণ করতে দেয় না। পরিবর্তে, তিনি প্রশ্নের নাম দেওয়ার এবং টীকা হিসাবে আলাদাভাবে সংরক্ষণ করার পরামর্শ দেন। ঠিক আছে, তারপর সরাসরি তার নাম দ্বারা পছন্দসই অনুরোধ নিন। উদাহরণ:

@org.hibernate.annotations.NamedQueries({
    @org.hibernate.annotations.NamedQuery(name = "Employee_FindById",
  	query = "from Employee where id = :id"),
    @org.hibernate.annotations.NamedQuery(name = "Employee_FindAllEmployes",
  	query = "from Employee"),
    @org.hibernate.annotations.NamedQuery(name = "Employee_UpdateEmployeeName",
  	query = "Update Employee set name = :newName where id = :id"),
...
})

যেকোন এন্টিটি ক্লাসের আগে টীকা যোগ করা যেতে পারে: ক্যোয়ারী নাম কোন সত্তার সাথে আবদ্ধ নয়।

আপনি ক্যোয়ারীতে বিভিন্ন প্যারামিটার যোগ করতে পারেন (কোয়েরি):

@org.hibernate.annotations.NamedQuery(
  name = "Employee_ FindAllEmployes",
  query = "from Employee",
  timeout = 1,
  fetchSize = 10,
  cacheable = true,
  cacheMode = "GET"
)

এই ধরনের অনুরোধগুলি ব্যবহার করা খুব সহজ - এর জন্য আপনাকে createNamedQueryএকটি পদ্ধতির পরিবর্তে একটি পদ্ধতি ব্যবহার করতে হবে createQuery:


Query<Employee> query = session.createNamedQuery("Employee_FindAllEmployes", Employee.class);
List<Employee> resultLIst = query.list();

6.2 নেটিভ কোয়েরি

এবং আরেকটি সহজ কিন্তু খুব দরকারী জিনিস হল NativeQuery

আপনি যদি HQL ব্যবহার করতে না চান, কিন্তু সত্তা ম্যাপিংয়ের জন্য হাইবারনেট ব্যবহার করতে চান, তাহলে আপনি ভাল পুরানো SQL এ প্রশ্ন লিখতে পারেন। কেউ আপনাকে সীমাবদ্ধ করে না।

createNativeQuery()এটি করার জন্য, আপনাকে এর পরিবর্তে পদ্ধতিটি কল করতে হবে createQuery()


NativeQuery<Employee> query = session.createNativeQuery("select * from employee", Employee.class);
List<Employee> resultLIst = query.list();

আপনি শুধু লিখুন createNativeQueryএবং সবকিছু আগের মত কাজ করবে। এই পদ্ধতিটি NativeQuery টাইপের একটি বস্তু প্রদান করে , যা কোয়েরি ক্লাস সমর্থন করে এমন সমস্ত পদ্ধতি সমর্থন করে । আপনার জন্য কিছুই পরিবর্তন হবে না.

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


@org.hibernate.annotations.NamedNativeQueries(
    @org.hibernate.annotations.NamedNativeQuery(name = "Employee_GetAll",
  	query = "select * from employee",
  	resultClass = Employee.class)
)

এবং অবশ্যই, এখানে তাদের সাথে কাজ করার জন্য কোড আছে:


NativeQuery<Employee> query = session.createNamedQuery("Employee_GetAll", Employee.class);
List<Employee> resultLIst = query.list();