Heute besteht unsere Aufgabe darin, das zweite Projekt zum Thema Hibernate abzuschließen. Sein Kern besteht darin, die Struktur der Datenbank zu verstehen, die Entität vorhandenen Tabellen zuzuordnen und die Mindestfunktionalität hinzuzufügen, um zu überprüfen, ob die Zuordnung korrekt erfolgt.
Jetzt ausführlicher:
- Laden Sie die Dump-Datei herunter und stellen Sie sie auf Ihrem lokalen Computer bereit. Als Datenbank verwenden wir eine Testdatenbank, die als Beispiel zusammen mit dem MySQL-Installationspaket verteilt wird. Der Dump wird benötigt, um den Zustand der Datenbank zu korrigieren, da wir nicht garantieren können, dass er sich an einem Tag, Monat oder Jahr nicht ändert.
- Wir werden keine Projektvorlage haben, also erstellen Sie das Projekt selbst. Es sollte ein Maven-Projekt mit allen erforderlichen Abhängigkeiten sein ( hibernate-core-jakarta , mysql-connector-java , p6spy ).
- Binden Sie unsere lokal bereitgestellte Datenbank als Datenquelle in Idea ein. Setzen Sie anschließend im Reiter „Datenbank“ den Cursor auf das Filmschema und drücken Sie die Tastenkombination
Alt+Ctrl+Shift+U
(funktioniert nur in der Ultimate-Version). Dadurch wird die Struktur des gesamten Filmschemas angezeigt (mit Spaltennamen, Schlüsseln usw.). Sieht aus wie das:Ich stimme zu, es ist nicht sehr angenehm anzusehen. Deaktivieren Sie die Anzeige des Titels aller Spalten und Kommentare:
Als Ergebnis erhalten Sie ein Datenbankschema, das bereits analysiert werden kann:
- Die Strecke sieht kompliziert aus, aber nicht alles ist so schlecht. Um die Struktur der Datenbank zu analysieren, müssen Sie herausfinden, wo Sie beginnen sollen. Es gibt keine einzige richtige Antwort, aber ich würde empfehlen, mit einer Tabelle zu beginnen
film
. Nehmen wir als Beispiel ein paar Beziehungen:- Die Beziehung zwischen Tabellen
film
undfilm_text
ist eine explizite OneToOne- Beziehung , da die Tabelle überfilm_text
ein Feld verfügtfilm_id
NICHTbezieht sich auf eine ID aus einer Tabellefilm
(kein Fremdschlüssel). Aber dem Namen und der Logik nach sollte diese Verbindung bestehen. Darüber hinaus fungiertfilm_text
das Feld in der Tabellefilm_id
als Primärschlüssel, der garantiert, dass einem „Film“ maximal ein „Filmtext“ entspricht. - Schauen wir uns nun die Tabellen
film
und ancategory
. Logischerweise kann ein Film mehrere Kategorien haben. Und eine Kategorie, vielleicht verschiedene Filme. Darüber hinaus gibt es zwischen diesen beiden Tabellen eine Zwischenverbindungstabellefilm_category
. Basierend auf all dem oben Gesagten handelt es sich um eine explizite ManyToMany- Beziehung . - Wir schauen uns die Tabellen an
film
undlanguage
. Aus logischer Sicht kann der Film in verschiedene Sprachen übersetzt sein und verschiedene Filme können in derselben Sprache sein. Das heißt, ManyToMany bietet sich an . Wenn wir uns jedoch den Inhalt der Tabelle ansehenfilm
, können wir erkennen, dass jede Zeile der Tabelle ein einzigartiger Film ist. Und es gibt nur ein Feld „ Sprache_ID“ in der Zeile (es gibt auch „Originalsprache_ID“, aber in allen Datensätzen ist es null, sodass wir es ignorieren können). Das heißt, ein Film kann nur eine Sprache haben. Und eine Sprache, vielleicht verschiedene Filme. Die Verbindung ist ManyToOne (die Verbindung ist vom Film zur Sprache gerichtet).
- Die Beziehung zwischen Tabellen
- Die Hauptaufgabe besteht nun darin, alle notwendigen Entitätsklassen zu erstellen und sie auf die Schematabellen abzubilden
movie
. - Fügen Sie eine Methode hinzu, die einen neuen Kunden (Kundentabelle) mit allen abhängigen Feldern erstellen kann. Vergessen Sie nicht, die Methode transaktional zu gestalten (um nicht in die Situation zu geraten, dass die Adresse des Käufers in der Datenbank erfasst wird, der Käufer selbst jedoch nicht).
- Fügen Sie eine Transaktionsmethode hinzu, die das Ereignis „Der Kunde hat einen zuvor ausgeliehenen Film zurückgegeben“ beschreibt. Wählen Sie ein beliebiges Käufer- und Mietereignis Ihrer Wahl. Die Bewertung des Films muss nicht neu berechnet werden.
- Fügen Sie eine Transaktionsmethode hinzu, die das Ereignis beschreibt: „Der Käufer ging zum Laden (Laden) und mietete (Miet-)Inventar (Inventar) dort.“ Gleichzeitig leistete er eine Zahlung (Zahlung) an den Verkäufer (Mitarbeiter). Film (durch Inventar) wählen Sie nach Ihrem Ermessen. Die einzige Einschränkung besteht darin, dass der Film leihbar sein muss. Das heißt, es sollten entweder überhaupt keine Inventardatensätze in der Vermietung vorhanden sein oder die Spalte „return_date“ der Tabelle
rental
für die letzte Vermietung dieses Inventars sollte ausgefüllt sein. - Fügen Sie eine Transaktionsmethode hinzu, die das Ereignis beschreibt: „Ein neuer Film wurde gedreht und wurde zum Ausleihen verfügbar.“ Film, Sprache, Schauspieler, Kategorien usw. wählen Sie nach Ihrem Ermessen.
- Die Tabellenstruktur kann nicht geändert werden. Aber Sie müssen Verbesserungsvorschläge machen. Wir haben eine problematische Stelle in Absatz 4 identifiziert (Fehlen eines Fremdschlüssels in der Tabelle
film_text
imfilm_id
Tabellenfeldfilm
). Schauen Sie, ob es noch solche „Fehler“ in der Datenbankstruktur gibt. Wenn ja, fügen Sie eine Readme-Datei zum Stammverzeichnis des Projekts hinzu und beschreiben Sie diese Fehler.
Projektanalyse: