Oggi il nostro compito è completare il secondo progetto sull'argomento Hibernate. La sua essenza è comprendere la struttura del database, mappare l'entità alle tabelle esistenti e aggiungere la funzionalità minima per verificare che la mappatura sia eseguita correttamente.

Ora più in dettaglio:

  1. Scarica il file di dump e distribuiscilo sul tuo computer locale. Come database, utilizzeremo un database di test, distribuito come esempio insieme al pacchetto di installazione di MySQL. Il dump è necessario per correggere lo stato del database, poiché non possiamo garantire che non cambierà in un giorno, mese, anno.
  2. Non avremo un modello di progetto, quindi crea tu stesso il progetto. Dovrebbe essere un progetto esperto con tutte le dipendenze richieste ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
  3. Collega il nostro database distribuito locale come origine dati in Idea. Successivamente, nella scheda Database, posiziona il cursore sullo schema del film e premi la combinazione di tasti Alt+Ctrl+Shift+U(funziona solo nella versione Ultimate). Questo mostrerà la struttura dell'intero schema del film (con nomi di colonne, chiavi, ecc.). Somiglia a questo:

    Sono d'accordo, non è molto comodo da guardare. Disattiva la visualizzazione del titolo di tutte le colonne e dei commenti:

    Di conseguenza, otterrai uno schema del database che può già essere analizzato:

  4. Il circuito sembra complicato, ma non tutto è così male. Per analizzare la struttura del database, è necessario trovare da dove iniziare. Non esiste un'unica risposta corretta, ma consiglierei di iniziare con una tabella film. Prendiamo ad esempio alcune relazioni:
    • La relazione tra le tabelle filme film_textè una relazione OneToOne esplicita , perché la tabella film_textha un campo film_idcheNONsi riferisce a un ID da una tabella film(nessuna chiave esterna). Ma per nome e logica, questa connessione dovrebbe essere. Inoltre, nella tabella, film_textil campo film_idfunge da chiave primaria, che garantisce che ad un "film" corrisponda non più di un "testo film".
    • Ora diamo un'occhiata alle tabelle filme category. Logicamente, un film può avere diverse categorie. E una categoria, forse film diversi. Inoltre, esiste una tabella di collegamento intermedia tra queste due tabelle film_category. Sulla base di tutto quanto sopra, questa è una relazione ManyToMany esplicita .
    • Guardiamo le tabelle filme language. Dal punto di vista della logica, il film può avere una traduzione in diverse lingue e diversi film possono essere nella stessa lingua. Cioè, ManyToMany suggerisce se stesso . Ma se guardiamo al contenuto della tabella film, possiamo vedere che ogni riga della tabella è un film unico. E c'è solo un campo language_id nella riga (c'è anche original_language_id, ma in tutti i record è nullo, quindi possiamo ignorarlo). Cioè, un film può avere solo una lingua. E una lingua, forse film diversi. La connessione è ManyToOne (la connessione è diretta dal film alla lingua).
  5. Ora il compito principale è creare tutte le classi di entità necessarie e mapparle sulle tabelle dello schema movie.
  6. Aggiungere un metodo in grado di creare un nuovo cliente (tabella clienti) con tutti i campi dipendenti. Non dimenticare di rendere transazionale il metodo (in modo da non entrare nella situazione in cui l'indirizzo dell'acquirente è registrato nel database, ma l'acquirente stesso no).
  7. Aggiungi un metodo transazionale che descriva l'evento "il cliente è andato e ha restituito un film precedentemente noleggiato". Scegli qualsiasi acquirente ed evento di noleggio di tua scelta. La valutazione del film non ha bisogno di essere ricalcolata.
  8. Aggiungi un metodo transazionale che descriva l'evento "l'acquirente è andato al negozio (negozio) e lì ha affittato (noleggio) l'inventario (inventario). Allo stesso tempo, ha effettuato un pagamento (pagamento) al venditore (personale). Film (attraverso l'inventario) scegli a tua discrezione. L'unica restrizione è che il film deve essere disponibile per il noleggio. Ovvero, non dovrebbero esserci record di inventario nel noleggio o la colonna return_date della tabella rentalper l'ultimo noleggio di questo inventario dovrebbe essere riempita.
  9. Aggiungi un metodo transazionale che descriva l'evento "è stato girato un nuovo film ed è diventato disponibile per il noleggio". Film, lingua, attori, categorie, ecc., scegli a tua discrezione.
  10. La struttura della tabella non può essere modificata. Ma è necessario dare suggerimenti per il miglioramento. Abbiamo identificato un punto problematico nel paragrafo 4 (assenza di chiave esterna nella tabella film_textsul campo film_iddella tabella film). Verifica se ci sono ancora tali "errori" nella struttura del database. In tal caso, aggiungi un file readme alla radice del progetto e descrivi questi errori.

Analisi del progetto: