JavaRush /Kurslar /All lectures for UZ purposes /Obyektni olishning turli usullari

Obyektni olishning turli usullari

All lectures for UZ purposes
Daraja, Dars
Mavjud

Metod get()

Agar obyektni ID (yoki Primary Key) bo'yicha olishni istasang, Hibernate'da uchta metod bor:

  • load()
  • get()
  • find()

Ular bir xil narsani qilishadi, lekin ba'zi farqlar bor. Umumiy metod formati get() quyidagicha:


EntityClass ismi = session.get(EntityClass.class, Object primaryKey);

get() metodi ikkinchi parametr sifatida obyektning ID (Primary Key) qabul qiladi va uni bazadan yuklab, qaytaradi. Misol:


	User user = session.get(User.class, 2);

Agar bunday ID bilan yozuv bazada topilmasa, metod null qaytaradi.

Metod load()

Obyektni yuklashning ikkinchi usuli – bu load() metodi. Metod formati load() ham shunday:


EntityClass ismi = session.load(EntityClass.class, Object primaryKey);

Ammо, uning harakati get() metodidan farq qiladi.

Birinchidan, bu metod haqiqiy obyektni emas, balki proxy: virtual to'siqni qaytaradi.

Ikkinchidan, load() metodini qo'llaganda, bazada bunday yozuv bor-yo'qligini tekshirish amalga oshirilmaydi. Uning o'rniga Hibernate darhol berilgan ID bilan proxy-obyekt yaratadi va uni qaytaradi.

Uchinchidan, barcha ma'lumotlar bazasi bilan ishni proxy-obyekt metodlarini chaqirganda amalga oshiriladi. Agar, masalan, getName() metodini chaqirmoqchi bo'lsang, unda birinchi marta baza bilan murojaat qilish amalga oshiriladi. Misol:


User user = session.load(User.class, new Integer(123));
String name = user.getName(); //bu yerda birinchi marta baza bilan murojaat amalga oshiriladi

load() metodini bazada obyektlar mavjudligini tekshirish uchun ishlatmaslik kerak – u buni ko'rsatmaydi. Bundan tashqari, agar unga noaniq ID, masalan null, berilsa, u oddiygina null qaytaradi.

Metod find()

find() metodi Session interfeysiga JPA standartidan kelgan. Va bilasizki, bu standart nafaqat metod imzolarini, balki ularning o'zini tutishini ham belgilaydi.

Bu metod get() metodi bilan bir xil ishlaydi. Agar berilgan kalit bo'yicha obyekt topilmasa, metod oddiygina null qaytaradi.


	User user = session.find(User.class, -2); //metod null qaytaradi

Metod refresh()

Obyektni bazadan yuklash bilan bog'liq yana bir foydali metod – bu refresh() metodi.

persist() metodi tushunyapsizmi, bu metod berilgan obyekt asosida bazadagi ma'lumotlarni yangilardi? Xo'sh, refresh() metodi teskarisi bilan ishlaydi: u mavjud obyektni bazadagi ma'lumotlar asosida yangilaydi.

Bunday xatti-harakatlar foydali bo'lishi mumkin, masalan, agar obyektni bazaga yozishda turli saqlangan protseduralar ishga tushsa va yozilgan ma'lumotlarni to'g'rilasa.

Bunday hollarda, agar u o'zgargan bo'lsa, obyektni bazadan qayta o'qish foydali bo'lishi mumkin. Misol:


User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //SQL INSERT va triggrlar chaqirildi

session.refresh(user);
//keyin yangilangan obyekt bilan ishlaymiz
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION