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:

  1. 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.
  2. 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 ).
  3. 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:

  4. 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 filmog film_texter en eksplisitt OneToOne- relasjon , fordi tabellen film_texthar et felt film_idsomIKKErefererer til en ID fra en tabell film(ingen fremmednøkkel). Men etter navn og logikk bør denne forbindelsen være. film_textI tillegg fungerer feltet i tabellen film_idsom en primærnøkkel, som garanterer at én «film» ikke tilsvarer mer enn én «filmtekst».
    • La oss nå se på tabeller filmog category. Logisk sett kan en film ha flere kategorier. Og én kategori, kanskje forskjellige filmer. I tillegg er det en mellomliggende lenketabell mellom disse to tabellene film_category. Basert på alt det ovennevnte er dette et eksplisitt ManyToMany- forhold .
    • Vi ser på bordene filmog language. 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 tabellen film, 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).
  5. Nå er hovedoppgaven å lage alle nødvendige enhetsklasser og tilordne dem til skjematabellene movie.
  6. 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).
  7. 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.
  8. 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 rentalfor siste utleie av denne beholdningen fylles ut.
  9. 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.
  10. 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_texti film_idtabellfeltet film). 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: