JavaRush /Kurslar /All lectures for UZ purposes /Boshqa turdagi so'rovlar

Boshqa turdagi so'rovlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

6.1 NamedQueries

Hibernate so'rovlarni bevosita kodda saqlamaslikka imkon beradi. Buning o'rniga, u so'rovlarga nom berishni va ularni alohida anotatsiya shaklida saqlashni taklif qiladi. Keyin esa kerakli so'rovni uning nomi orqali olishimiz mumkin. Misol:


@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"),
...
})

Anotatsiyalarni har qanday Entity-klass oldida qo'shish mumkin: so'rovlar nomlari hech qanday Entity bilan bog'liq emas.

Shuningdek, so'rovga (query) turli parametrlarni qo'shishingiz mumkin:


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

Bu kabi so'rovlarni ishlatish juda oson – buning uchun createQuery metodining o'rniga createNamedQuery metodidan foydalanish kerak:


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

6.2 NativeQuery

Yana bir oddiy, lekin juda foydali narsa – NativeQuery.

Agar siz HQL ishlatishni istamasangiz, lekin Hibernate dan entity mapping uchun foydalanmoqchi bo'lsangiz, eskicha SQL tilida so'rov yozishingiz mumkin. Hech kim sizga to'sqinlik qilmaydi.

Buning uchun shunchaki createNativeQuery() metodini createQuery() o'rniga chaqirish kerak.


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

Siz shunchaki createNativeQuery deb yozasiz va hamma narsa avvalgiday ishlaydi. Bu metod NativeQuery turidagi ob'ektni qaytaradi, u Query klassining barcha metodlarini qo'llab-quvvatlaydi. Siz uchun hech narsa o'zgarmaydi.

Bundan tashqari, Native SQL Query ni ham Named Queries sifatida saqlash mumkin.


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

Albatta, ular bilan ishlash uchun kodni keltiramiz:


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

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION