Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Spring Framework Grundkurs

Hibernate – praktisches Beispiel

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Um ein Persistenz-Framework wie Hibernate kennen zu lernen, bekommen Sie hier eine Demonstration seiner Möglichkeiten und wie es sich in den herkömmlichen Code einordnen lässt.

Transkript

Es ist wichtig, zu überprüfen, dass alle Abhängigkeiten für Hibernate zur Verfügung stehen. IN diesem Beispiel ist das zunächst einmal das Core Spring Framework eine Mögliche Art von Datenbank, in dem Fall eine H2 Datenbank, eine so genannte inMemmory Database für Java das Paket Hibernate selbst, hier in der Version 4.2.11 JDBC, um ent sprechend auch die Datenbank gleich einbinden zu können, das relationale Mapping Paket von Spring, und das Transaktionspaket. Als nächstes ist es wichtig, dass die richtigen Konfigurationen getroffen worden sind in der XML Datei. Zunächst einmal der Component Scan, der die Java Beans initialisiert. Dann die entsprechende Data Source, die hier die Datenbank bereit stellt. Diese ist alternativ austauschbar gegen jede Art von DataSource, z.B. wie sie ein Applikationsserver wie JBoss liefern würde. Durch tx annotation driven wird Transaktionsmanagement aktiviert anhand der Annotationen von transcational Dafür braucht es auch einen so genannten Transaction Manager, der in dem Fall der Hibernate Transaction Manager ist. Dieser kümmert sich dann um die Session Factory, die dann die Daten perisistiert. Die Session Factory selbst ist die LocalSessionFactoryBean von dem Hibernate Paket. Dort wird die Datasource spezifiziert, die soeben hier oben auch schon war, Dann die Pakete, wo die entsprechenden Objekte gefunden werden können. Und dann die Hibernate-spezifischen Optionen. In den Hibernate-spezifischen Optionen befindet sich nun der Dialekt der jeweiligen Datenbank, in dem Fall der Datenbank Dialekt H2. Außerdem, durch Angabe von show_sql, wird in der Kommandozeile jede der SQL Abfragen mit protokolliert. Durch die Angabe von hibernate.htm2ddl.auto create-drop wird automatisch wenn die Datenbank hochgefahren wird, anhand der Informationen der Objekte das Datenbankschema erzeugt. Quasi die Tabellen. Um die Anwendung hochzufahren, gibt es eine Main Klasse, die entsprechend aus dem Applikationskontext die Datei lädt, die entsprechende XML Datei, und dann mit Hilfe des DataAccess Objekts von dem Auto alle Autos abfragt und diese auf der Konsole ausgibt. Wenn man diese Anwendungen ausführt, passiert zunächst einmal sehr sehr viel auf der Konsole. Das Erste, was Hibernate konkret macht, ist die Anlage der jeweiligen Tabellen, und die Möglichkeit, die verschiedenen Schlüssel der Tabellen miteinander zu verbinden. Die Informationen, wie die Tabellen zu erstellen sind, erhält Hibernate aus dem Modell der Objekte Entsprechend gibt es ein Fahrzeug, ein Fahrzeug ist also nun eine Entität, wird dementsprechend auch als Tabelle angelegt. Zusätzlich hat ein Fahrzeug eine ID. Durch die Angabe von GeneratedValue wird diese ID zukünftig immer von selbst erzeugt. Des Weiteren enthält es einen Text model der eine besonderen Tabellennamen bekommt: model_identification und es hat eine Beziehung zu Reifen als auch eine Beziehung zu Besitzern IN Falle von Reifen hat ein Fahrzeug mehrere Reifen, also 0neToMany IM Falle von Besitzer können mehrere Besitzer eines Autos existieren. Genau so können auch mehrere Besitzer mehrere Autos haben. Durch die Angabe des CascadeType wird festgelegt: immer dann, wenn das Fahrzeug gespeichert wird, werden auch die Reifen gespeichert. Sollte das Fahrzeug gelöscht werden werden auch entsprechend die Reifen gelöscht. Die Angabe von mappedBy sagt aus, dass die jeweilige Beziehung bereits auf dem Reifen definiert ist und dementsprechend über die Abfrage von Car erzeugt wird. Im Reifen also gibt es nun auch die Beziehung CarEntity und diese heißt hier Car. Entsprechend wird dadurch die Verbindung hergestellt. Die Beziehung zu Personen ist also ManyToMany und dementsprechend auch durch cars auf der Person definiert. Wenn man also nur die Person anschaut, hat diese auch erst einmal eine ID eine Adresse, einen Namen und die Beziehung zu den Fahrzeugen. Die Beziehung wird hier also definiert und durch die Angabe von JoinTable wird auch der Beziehungsverbinder definiert. In dem Fall erhält dieser eine eigene Tabelle, die einerseits den Besitzer enthält und andererseits das Fahrzeug. Besonders ist an der Stelle auch, dass Adress selbst ein eigenes Objekt ist aber trotzdem nicht über Relationen in die Tabelle eingebunden wurde, sondern tatsächlich befindet sich die Straße und die Nummer für die Straße auf der selben Tabelle wie die Person. Durch die Abgabe von embeddable ist es also möglich, ein anderes Objekt in ein Entitätsobjekt einzubinden, ohne dafür eine Relation zu erzeugen. Verfolgt man also weiter, was passiert, wird dann die Datenbank konfiguriert und Einträge gemacht. Durch Insert Befehle. Für die Konfiguration ist hier Configuration als Bean zuständig. Configuration ist eine InitializingBean, wird dementsprechend ausgeführt, sobald der Kontext geladen ist. Beim Aufruf also von AfterPropertiesSet wird die Datenbank konfiguriert, dort wird zunächst in die Kommandozeile geschrieben, danach werden die Autos angelegt, die Autos gespeichert, und zusätzlich wird die Person als Besitzer dieser Autos eingetragen und die Person dementsprechend auch gespeichert. Danach ist die Konfiguration abgeschlossen. Das Ganze bildet sich hier ab durch Insert Befehle zunächst in das Fahrzeug, und die Inserts von verschiedenen Reifen für jedes Fahrzeug, danach wird die Person gespeichert und die Verbindung zwischen Person und Auto hergestellt. Für die Abfrage in der Hauptanwendung wird nun also getAllCars auf dem Data Access Objekt verwendet. Die Implementierung dafür befindet sich in der Car Data Object Implementation. Es handelt sich dabei um ein transactional Objekt, d.h. jede Operation, die sich hierunter befindet, ist automatisch transactional. Für alle anderen muss separat angegeben werden, ob es sich um lesende Zugriffe handelt, oder um Zugriffe, die Änderungen vornehmen. Anhand der SessionFactory wird nun also die vorher von Hibernate spezifizierte Datenbankpersistenz in das Objekt hinein geladen, mit Hilfe dieser Factory kann also der Aufruf GetAllCars einen so genannten NamedQuery ausführen der sich hier als GetAllCars auf CarEntity definiert. Dieser Query selbst findet sich nun also auf CarEntity in der Definition von NamedQueries, Dort als NamedQuery für GetAllCars. Dieser ruft schlicht und einfach anhand der Hibernate Query Language von allen Fahrzeugen alle Fahrzeuge jeweils ab, ohne Einschränkungen wie z.B. in diesem Fall. Durch diesen simplen Aufruf werden also diverse Abfragen für die Datenbank automatisch erstellt, und die Objekte entsprechend abgerufen. So entsteht dann ohne große Komplexität das Fahrzeug mit den jeweiligen Reifen und der Person. Auch wenn es sehr verführerisch ist, nun alles in Hibernate abzubilden, ist es trotzdem notwendig, einige Dinge im Hinterkopf zu behalten. Denn das Datenmodell von Hibernate ist dementsprechend komplex und auch schwieriger zu warten, da die Datenbank darunter nicht mehr komplett der eigenen Kontrolle unterliegt. D.h. z.B. bei der Änderung verschiedener Versionen kann es dementsprechend zu Problemen kommen, und genau diese Problemstellung sollte man immer im Kopf haben, wenn man mit Hibernate arbeitet. Außerdem wird aus Caching Strategie Gründen Hibernate nicht immer alle Objekte neu von der Datenbank herunterladen. Auch diese Arten und Strategien des Cachings müssen einem bei der Nutzung von Hibernate immer bewusst sein. Sie habe nun also einen kurzen Überblick über die Möglichkeiten von Spring und Hibernate in der Zusammenarbeit gesehen. Zukünftig wissen Sie also, wie Sie anhand von Objekten Datenbankmodelle völlig unkompliziert und ohne jegliches SQL erzeugen können.

Spring Framework Grundkurs

Steigen sie zum Java-Champion auf und meistern Sie den Umgang mit dem Spring Framework.

2 Std. 4 min (20 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Spring Framework Spring Framework 3
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:24.09.2014
Laufzeit:2 Std. 4 min (20 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!