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:
- 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.
- 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 ).
- 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:
- 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
film
efilm_text
è una relazione OneToOne esplicita , perché la tabellafilm_text
ha un campofilm_id
cheNONsi riferisce a un ID da una tabellafilm
(nessuna chiave esterna). Ma per nome e logica, questa connessione dovrebbe essere. Inoltre, nella tabella,film_text
il campofilm_id
funge da chiave primaria, che garantisce che ad un "film" corrisponda non più di un "testo film". - Ora diamo un'occhiata alle tabelle
film
ecategory
. Logicamente, un film può avere diverse categorie. E una categoria, forse film diversi. Inoltre, esiste una tabella di collegamento intermedia tra queste due tabellefilm_category
. Sulla base di tutto quanto sopra, questa è una relazione ManyToMany esplicita . - Guardiamo le tabelle
film
elanguage
. 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 tabellafilm
, 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).
- La relazione tra le tabelle
- Ora il compito principale è creare tutte le classi di entità necessarie e mapparle sulle tabelle dello schema
movie
. - 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).
- 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.
- 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
rental
per l'ultimo noleggio di questo inventario dovrebbe essere riempita. - 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.
- 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_text
sul campofilm_id
della tabellafilm
). 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:
GO TO FULL VERSION