Bugun bizning vazifamiz – Hibernate mavzusi bo'yicha ikkinchi loyihani bajarish. Uning maqsadi – MB strukturasiga tushunib olish, mavjud jadvalalarga entity mapping qilish va mapping to'g'ri bajarilganligini tekshirish uchun minimal funksionallik qo'shish.
Endi batafsil:
- Dump faylni yuklab olish va uni o'z kompyuteringizda ochish. MB sifatida biz MySQL o'rnatish paketi bilan birga tarqatiladigan test ma'lumotlar bazasini ishlatamiz. Dump MB holatini saqlash uchun kerak, chunki bir kun yoki oyda yoki yilda o'zgarmasligini kafolatlab bo'lmaydi.
- Loyiha uchun tayyor shablon bo'lmaydi, shuning uchun loyihani mustaqil yarat. Bu barcha kerakli dependencies bilan maven loyihasi bo'lishi kerak (hibernate-core-jakarta, mysql-connector-java, p6spy).
- Bizning mahalliy MB-ni Idea-dan datasource sifatida ulash. Shundan so'ng Database oynasida cursorni movie sxemaga qo'yib
Alt+Ctrl+Shift+Utugmalar kombinatsiyasini bosing (faqat Ultimate versiyada ishlaydi). Bu butun movie sxemasining strukturani ko'rsatadi (ustunlar nomlari, kalitlar va hk.). Quyidagiga o'xshaydi:
Qabul qilaman, ko'rish qiyin. Barcha ustun nomlari va izohlarni ko'rsatishni o'chiring:
Buning natijasida MB sxemasini tahlil qilish mumkin bo'ladi:
- Sxema murakkab ko'rinadi, lekin hammasi shunchalik yomon emas. MB strukturasini tahlil qilish uchun nimadan boshlashni topish kerak. Yagona to'g'ri javob yo'q, lekin
filmjadvalidan boshlashni tavsiya qilaman. Keling, bir nechta bog'liqliklarni ko'rib chiqaylik:-
filmvafilm_textjadvallari o'rtasidagi bog'liqlik – bu aniq OneToOne bog'liqlik, chunkifilm_textjadvalidafilm_idmaydon mavjud, ufilmjadvalidagi IDga murojaat qilmaydi (foreign key yo'q). Ammo nom va mantiqqa ko'ra, bu bog'liqlik mavjud bo'lishi kerak. Bundan tashqari,film_textjadvalidafilm_idmaydon birlamchi kalit sifatida ishlaydi, bu bitta "film"ga faqat bitta "film matni" mos kelishini kafolatlaydi. - Endi
filmvacategoryjadvallariga qaraylik. Mantiqan olganda, film bir nechta kategoriyaga ega bo'lishi mumkin. Va bir toifa, turli filmlarda bo'lishi mumkin. Bundan tashqari, ushbu ikki jadval o'rtasidafilm_categorybog'lanish jadvali mavjud. Yuqorida aytib o'tilganlardan kelib chiqqan holda – bu aniq ManyToMany bog'lanish. -
filmvalanguagejadvallariga qaraylik. Mantiqan olganda, film, ehtimol, turli tillarda tarjima qilingan bo'lishi mumkin va turli filmlar bir tilda bo'lishi mumkin. Ya'ni, ManyToMany bog'lanishga o'xshaydi. Ammo, agarfilmjadvalining tarkibiga qarasak, har bir qator noyob film ekanligini sezishimiz mumkin. Va qatorda faqat bitta language_id maydon mavjud (Bu yerdaoriginal_language_idmavjud, ammo barcha yozuvlarda bu null, shuning uchun biz uni e'tiborsiz qoldiramiz). Ya'ni, bitta film faqat bitta til bilan bo'lishi mumkin. Va bitta til, turli filmlarda bo'lishi mumkin. Bog'lanish – ManyToOne (bog'lanish film-dan language-ga yo'nalgan).
-
- Asosiy vazifa – barcha kerakli entity class-larni yaratish va ularni
moviesxemasi jadvallariga mapping qilish. - Yangi xaridor (customer jadval) yaratishga qodir bo'lgan metod qo'shish. Metod yordamida xaridorning manzili MB-ga yozilishini, lekin xaridor o'zi yoqlanmasligini ta'minlash uchun u transactional bo'lishi kerak.
- Avval ijaraga olingan filmni qaytarib bergan xaridor voqeasini tasvirlaydigan transactional metod qo'shish. Xaridor va ijara voqeasini o'zingiz xohlagancha tanlang. Filmlar reytingini qayta hisoblash shart emas.
- Do'konga (store) borib u yerdan inventar (inventory) ijaraga olgan va to'lovni (payment) xodim (staff) bilan amalga oshirgan xaridor voqeasini tasvirlaydigan transactional metod qo'shish. Filmni (inventory orqali) o'zingiz xohlagan tarzda tanlang. Yagona cheklov – film ijaraga olish uchun mavjud bo'lishi kerak. Ya'ni, either inventoryga hech qanday ijara yozuvi bo'lmasligi kerak yoki
rentaljadvalining return_date ustuni oxirgi ijarasi uchun to'ldirilishi kerak. - Yangi film suratga olinib, ijaraga olish uchun mavjud bo'lganligini tasvirlaydigan transactional metod qo'shish. Film, til, aktyorlar, kategoriyalar va h.k.ning tanlovini o'zingiz qiling.
- Jadval strukturasini o'zgartirish mumkin emas. Ammo yaxshilash takliflaringizni qo'shish – kerak. Biz 4-bandda bir muammo joyini aniqladik (
film_textjadvalidafilm_idmaydon bo'yicha foreign keyning yo'qligi). MB strukturasida bunday "xatolar" mavjudmi, qarang. Agar mavjud bo'lsa – loyihaning rootida readme fayl qo'shing va bu xatolarni tasvirlang.
Loyihani tushunib olish:
GO TO FULL VERSION