I dag er oppgaven vår å fullføre det andre prosjektet om Hibernate-emnet. Essensen er å forstå strukturen til databasen, kartlegge enheten til eksisterende tabeller og legge til minimumsfunksjonalitet for å kontrollere at kartleggingen er riktig utført.
Nå mer detaljert:
- Last ned dumpfilen og distribuer den til din lokale maskin. Som database vil vi bruke en testdatabase, som distribueres som eksempel sammen med MySQL-installasjonspakken. Dumpen er nødvendig for å fikse tilstanden til databasen, siden vi ikke kan garantere at den ikke endres i løpet av en dag, måned, år.
- Vi vil ikke ha en prosjektmal, så lag prosjektet selv. Det bør være et maven-prosjekt med alle nødvendige avhengigheter ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Plugg inn vår lokale distribuerte database som en datakilde i Idea. Etter det, i Database-fanen, setter du markøren på filmskjemaet og trykker på tastekombinasjonen
Alt+Ctrl+Shift+U
(fungerer bare i Ultimate-versjonen). Dette vil vise strukturen til hele filmskjemaet (med kolonnenavn, nøkler osv.). Ser slik ut:Jeg er enig, det er ikke særlig behagelig å se på. Slå av visningen av tittelen på alle kolonner og kommentarer:
Som et resultat vil du få et databaseskjema som allerede kan analyseres:
- Kretsen ser komplisert ut, men ikke alt er så ille. For å analysere strukturen til databasen, må du finne hvor du skal begynne. Det er ikke et enkelt riktig svar, men jeg vil anbefale å starte med en tabell
film
. La oss ta noen relasjoner som eksempel:- Forholdet mellom tabeller
film
ogfilm_text
er en eksplisitt OneToOne- relasjon , fordi tabellenfilm_text
har et feltfilm_id
somIKKErefererer til en ID fra en tabellfilm
(ingen fremmednøkkel). Men etter navn og logikk bør denne forbindelsen være.film_text
I tillegg fungerer feltet i tabellenfilm_id
som en primærnøkkel, som garanterer at én «film» ikke tilsvarer mer enn én «filmtekst». - La oss nå se på tabeller
film
ogcategory
. Logisk sett kan en film ha flere kategorier. Og én kategori, kanskje forskjellige filmer. I tillegg er det en mellomliggende lenketabell mellom disse to tabellenefilm_category
. Basert på alt det ovennevnte er dette et eksplisitt ManyToMany- forhold . - Vi ser på bordene
film
oglanguage
. Fra et logisk synspunkt kan filmen ha en oversettelse til forskjellige språk og forskjellige filmer kan være på samme språk. Det vil si at ManyToMany foreslår seg selv . Men hvis vi ser på innholdet i tabellenfilm
, kan vi se at hver rad i tabellen er en unik film. Og det er bare ett language_id- felt i linjen (det er også original_language_id, men i alle poster er det null, så vi kan ignorere det). Det vil si at én film bare kan ha ett språk. Og ett språk, kanskje forskjellige filmer. Forbindelsen er ManyToOne (forbindelsen er rettet fra film til språk).
- Forholdet mellom tabeller
- Nå er hovedoppgaven å lage alle nødvendige enhetsklasser og tilordne dem til skjematabellene
movie
. - Legg til en metode som kan opprette en ny kunde (kundetabell) med alle avhengige felt. Ikke glem å gjøre metoden transaksjonell (for ikke å komme i situasjonen at adressen til kjøperen er registrert i databasen, men kjøperen selv ikke er det).
- Legg til en transaksjonsmetode som beskriver «kunden gikk og returnerte en tidligere leid film»-hendelsen. Velg hvilken som helst kjøper og leiebegivenhet du ønsker. Karakteren til filmen trenger ikke å beregnes på nytt.
- Legg til en transaksjonsmetode som beskriver hendelsen «kjøperen gikk til butikken (butikken) og leide (leie) inventar (inventar) der. Samtidig foretok han en betaling (betaling) til selger (personale). Film (gjennom inventar) velg etter eget skjønn. Den eneste begrensningen er at filmen må være tilgjengelig for utleie. Det vil si at enten skal det ikke være noen beholdningsposter i utleie i det hele tatt, eller så skal returdato- kolonnen i tabellen
rental
for siste utleie av denne beholdningen fylles ut. - Legg til en transaksjonsmetode som beskriver hendelsen «en ny film ble spilt inn og den ble tilgjengelig for utleie». Film, språk, skuespillere, kategorier osv., velg etter eget skjønn.
- Tabellstrukturen kan ikke endres. Men du må komme med forslag til forbedringer. Vi identifiserte ett problematisk sted i avsnitt 4 (fravær av fremmednøkkel i tabellen
film_text
ifilm_id
tabellfeltetfilm
). Se om det fortsatt er slike "tabber" i databasestrukturen. I så fall, legg til en readme-fil i roten av prosjektet og beskriv disse feilene.
Prosjektanalyse: