Astăzi sarcina noastră este să finalizăm al doilea proiect pe tema Hibernate. Esența sa este de a înțelege structura bazei de date, de a mapa entitatea la tabelele existente și de a adăuga funcționalitatea minimă pentru a verifica dacă maparea este făcută corect.
Acum mai detaliat:
- Descărcați fișierul de descărcare și implementați-l pe mașina dvs. locală. Ca bază de date, vom folosi o bază de date de testare, care este distribuită ca exemplu împreună cu pachetul de instalare MySQL. Dump-ul este necesar pentru a remedia starea bazei de date, deoarece nu putem garanta că nu se va schimba într-o zi, lună, an.
- Nu vom avea un șablon de proiect, așa că creați singur proiectul. Ar trebui să fie un proiect maven cu toate dependențele necesare ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Conectați baza noastră de date locală implementată ca sursă de date în Idea. După aceea, în fila Bază de date, puneți cursorul pe schema filmului și apăsați combinația de taste
Alt+Ctrl+Shift+U
(funcționează doar în versiunea Ultimate). Aceasta va afișa structura întregii scheme de film (cu nume de coloane, chei etc.). Arata asa:Sunt de acord, nu este foarte confortabil de vizionat. Opriți afișarea titlului tuturor coloanelor și comentariilor:
Ca rezultat, veți obține o schemă a bazei de date care poate fi deja analizată:
- Circuitul pare complicat, dar nu totul este atât de rău. Pentru a analiza structura bazei de date, trebuie să găsiți de unde să începeți. Nu există un singur răspuns corect, dar aș recomanda să începeți cu un tabel
film
. Să luăm ca exemplu câteva relații:- Relația dintre tabele
film
șifilm_text
este o relație explicită OneToOne , deoarece tabelulfilm_text
are un câmpfilm_id
careNUse referă la un ID dintr-un tabelfilm
(fără cheie străină). Dar după nume și logică, această conexiune ar trebui să fie. În plus, în tabel,film_text
câmpulfilm_id
acționează ca o cheie primară, ceea ce garantează că un „film” corespunde nu mai mult de un „text de film”. - Acum să ne uităm la tabele
film
șicategory
. În mod logic, un film poate avea mai multe categorii. Și o categorie, poate filme diferite. În plus, există un tabel de legătură intermediar între aceste două tabelefilm_category
. Pe baza tuturor celor de mai sus, aceasta este o relație explicită ManyToMany . - Ne uităm la tabele
film
șilanguage
. Din punct de vedere al logicii, filmul poate avea o traducere în diferite limbi și diferite filme pot fi în aceeași limbă. Adică, ManyToMany se sugerează . Dar dacă ne uităm la conținutul tabeluluifilm
, putem vedea că fiecare rând al tabelului este un film unic. Și există un singur câmp language_id în linie (există și original_language_id, dar în toate înregistrările este nul, așa că îl putem ignora). Adică, un film poate avea o singură limbă. Și o limbă, poate filme diferite. Conexiunea este ManyToOne (conexiunea este direcționată de la film la limbă).
- Relația dintre tabele
- Acum sarcina principală este de a crea toate clasele de entități necesare și de a le mapa pe tabelele de schemă
movie
. - Adăugați o metodă care poate crea un client nou (tabel de clienți) cu toate câmpurile dependente. Nu uitați să faceți metoda tranzacțională (pentru a nu intra în situația că adresa cumpărătorului este înregistrată în baza de date, dar cumpărătorul însuși nu).
- Adăugați o metodă tranzacțională care descrie evenimentul „clientul a mers și a returnat un film închiriat anterior”. Alegeți orice cumpărător și eveniment de închiriere la alegere. Evaluarea filmului nu trebuie recalculată.
- Adăugați o metodă tranzacțională care descrie evenimentul „cumpărătorul a mers la magazin (magazin) și a închiriat (închiriat) inventar (inventar) acolo. În același timp, a făcut o plată (plată) către vânzător (personal). Filmul (prin inventar) alegeți la discreția dvs. Singura restricție este că filmul trebuie să fie disponibil pentru închiriere. Adică, fie nu ar trebui să existe nicio înregistrare de inventar în închiriere, fie trebuie completată coloana return_date din tabelul pentru ultima închiriere a acestui inventar.
rental
- Adăugați o metodă tranzacțională care descrie evenimentul „a fost filmat un nou film și a devenit disponibil pentru închiriere”. Film, limbaj, actori, categorii etc., alegeți la discreția dvs.
- Structura tabelului nu poate fi modificată. Dar trebuie să faceți sugestii de îmbunătățire. Am identificat un loc problematic în paragraful 4 (absența cheii externe în tabelul
film_text
din câmpulfilm_id
tabeluluifilm
). Vedeți dacă mai există astfel de „gafe” în structura bazei de date. Dacă da, adăugați un fișier readme la rădăcina proiectului și descrieți aceste gafe.
Analiza proiectului: