
Die Java Persistence API (JPA) wird zur Synchronisation der Objekte in der Java-Welt und der relationalen Datenbank genutzt. Diese Synchronisation geschieht meist voll transparent.
Kurze Vorstellung des Autors des Kurses, die eine Erklärung beinhaltet, warum ich mich als Dozent dieses Kurses besonders eigne. Warum ist es sinnvoll die Java Persistance API zu erlernen?
Das Kursprojekt, welches uns in den Praxislektionen begleiten wird, wird in diesem Video vorgestellt.
Überblick über die einzelnen Punkte des Installationsprozesses und Erklärung, warum wir einiges an Software installieren müssen, um die Java Persistence API (JPA) in Aktion zu erleben.
Download des Java JDKs von Oracle und Installation desselben. Java ist die Grundlage der JPA, der Entwicklungsumgebung Eclipse und auch des Oracle SQL Developers.
Download und Installation der Oracle Express Edition (Oracle XE) 11g Release 2
Um nicht die Standarddatenbank der Oracle DB nutzen zu müssen, wird ein neuer Benutzer inklusive Tablespaces und Schema angelegt.
Bis jetzt sind wir quasi blind, was unsere Datenbank betrifft. Wir wissen zwar, dass die Oracle DB als Service auf unserem System läuft. Wir können aber keine grafische Darstellung der Datenbank sehen. Aus diesem Grunde installieren wir uns den Oracle SQL Developer, ein Tool, um Datenbanken anzuzeigen.
Wer nicht auf eine Oracle Datenbank in diesem Kurs setzen möchte oder wem das Limit der kostenfreien Edition des Oracle Datenbankmanagementsystems zu niedrig ist, der kann auf ein alternatives Datenbankmanagementsystem aufsetzen, welches sich MariaDB nennt. Dies ist aber nur eine Alternative unter vielen.
HeidiSQL wird automatisch mit dem MariaDB-Datenbankmanagementsystem mit installiert. HeidiSQL ist die Schwester zu dem Oracle SQL Developer. Mit HeidiSQL lässt sich in die Datenbanken schauen.
Bei Eclipse handelt sich um eine Entwicklungsumgebung. Wir entwickeln innerhalb dieser Entwicklungsumgebung unsere Programme, die die Java Persistent API (JPA) nutzen.
Der JPA-Diagram-Editor ist ein Plugin innerhalb von Eclipse. Dieses Plugin eignet sich zur Visualisierung der Entities innerhalb eines Programmes, welches die Java Persistent API (JPA) nutzt.
Unser Java Persistent API-Projekt (JPA-Projekt) wird angelegt, indem Hibernate und auch ein Datenbanktreiber in dieses konfiguriert wird.
Wir schauen uns die JPA Perspektive, die sich innerhalb von Eclipse befindet, näher an.
Unsere erste Entity wird angelegt.
Jetzt geht es darum, die Entity zu persistieren. Damit ist unser erster Round-Trip geschafft. Unsere Datenbank wurde befüllt!
Die Java Persistence API (JPA) mappt nicht direkt in die Datenbank, sondern sie mappt die Objektwelt in SQL-Statements. Um Probleme, die innerhalb der JPA auftreten können, beheben zu können, muss die Structured Query Language (SQL) beherrscht werden.
Ein kurzer Überblick über SQL und das Anwendungsgebiet von SQL.
Anlegen von Tabellen in der Datenbank mit Hilfe von SQL.
SQL Statements, um vorhandene Tabellen wieder abzuändern oder eine Tabelle ganz zu löschen.
Aufbau von Relationen zwischen Tabellen.
Inhalte von Tabellen mit Hilfe des SELECT-Statements von SQL anzeigen.
Änderung des Inhaltes einer Tabelle mit Hilfe von INSERT und UPDATE sowie DELETE.
Unterschiedliche Join-Typen auf SQL-Datenbanken.
Gruppierungen und Aggregatfunktionen in SQL
Nutzen des Oracle SQL Developers, um in der Oracle-Datenbank alle Tabellen zu entfernen und individuelle Tabellen anzulegen.
Den Oracle SQL Developer nutzen um vorhandene Tabellen in ihrer Struktur zu modifizieren.
Den Tabelleninhalt mit dem Oracle SQL Developer modifizieren und eigene SQL-Befehle absetzen.
Fremdschlüsselspalte einfügen und diese mit einer anderen Tabelle innerhalb des Oracle SQL Developers verknüpfen sowie die Relation grafisch mit Krähenfußnotation sich anzeigen lassen.
Demonstration der Joins innerhalb des Oracle SQL Developers.
Entitys haben in der Java Persistent API einen Lebenszyklus (engl. Lifecyle). Sie können in einem Transient-, Managed-, Detached- oder Deleted-Zustand sein.
Unterschiedliche Möglichkeiten, um ein Objekt anhand seiner ID aus der Datenbank zu holen. Es wird sowohl find() wie auch getReference() genutzt.
Eine der Möglichkeiten alle Objekte von einem Typ, in unserem Beispiel also Person, aus der Datenbank zu beziehen.
Die aus der Datenbank bezogenen Objekte werden in ihren Variablen abgeändert und wieder in die Datenbank geschrieben.
Objekte können in der Datenbank seitdem sie aus dieser geholt worden sind, modifiziert worden sein. Sie können mit refresh() in der objektorientierten Welt aktualisiert werden.
Wenn ein Objekt aus der Datenbank gelöscht werden soll, so muss dieses erst einmal von dort geholt werden, dann als zu löschend markiert werden und mit einem Ende der Transaktionsklammer dann real aus der Datenbank entfernt werden. Wichtig ist, dass damit das Objekt nicht aus der objektorientierten Welt verloren geht, sondern weiter besteht, bis keine Referenz mehr auf dieses gehalten wird und der Garbage Collector von Java es abräumt.
Nutzen des Features des Loslösens und wieder Mergen von Entity-Objekten.
Das Data Access Objekt (DAO) dient als Schnittstelle zwischen der Datenbankwelt und der Objektwelt und kann ausgetauscht werden, um eine andere Implementierung nutzen zu können.
Wie kommt unser Max Mustermann wieder aus der Datenbank?
Demonstration des Unterschiedes zwisches find() und getReference(), wenn das Objekt in der Datenbank nicht vorhanden ist.
Änderungen an Objekten durchführen und diese Änderungen in die Datenbank schreiben.
Löschen von Objekten inklusive der Demonstration, dass das Objekt auf der Java-Seite dadurch nicht verschwindet.
Convention over Configuration wird in der Java Persistence API angewandt, um die Möglichkeit einer allgemeinen Konfiguration zu haben, die dann individuell überschrieben werden kann. Welche Möglichkeiten der Überschreibung es gibt, wird in diesem Abschnitt behandelt.
Es ist auf unterschiedliche Art und Weise möglich, den Primärschlüssel, der sich hinter der @Id-Spalte der Datenbank verbirgt, zu generieren. Die Java Persistence API bietet hier umfangreiche Anpassungsmöglichkeiten, stellt aber auch gleichzeitig eine Standardkonfiguration zur Verfügung.
Änderung des Tabellennamens sowie Eindeutigkeitsforderungen
Anpassungen der einzelnen Spalten an das Datenbankschema.
Variablen in einer Klasse können entweder direkt oder über die Getter und Setter durch die Java Persistence API beschrieben und gelesen werden.
Mit Hilfe von @Basic lässt sich das Laden von Variableinhalten verzögern.
Variablen ausschließen.
Die Java-Standardklassen für Zeitformate aus java.util namens Date und Calendar über @Temporal nutzen.
Große Objekte mit der Datenbank synchronisieren.
Zwei unterschiedliche Möglichkeiten Java-Enumerations in die Datenbank zu bringen.
Unserer Person-Klasse wird ein Geburtsdatum hinzugefügt. Dabei gehen wir einmal über die java.util.Date-Klasse mit @Temporal-Annotation und einmal über die java.sql.Date-Klasse.
Wir legen die Möglichkeit der Angabe des Geschlechtes an, indem wir eine Enumeration nutzen.
Binärobjekte werden in die Datenbank transferiert.
Ein Kommentar wird hinzugefügt, der aber einen anderen Spaltennamen als den Variablennamen in Java bekommt.
Statt die Hilfstabelle zu nutzen, werden die in der Oracle Datenbank eingebauten Sequenzen genutzt.
Callback-Methoden werden genutzt, um der Entity-Klasse Auskunft darüber zu geben, was die JPA gerade mit ihr getan hat.
Callback-Methoden müssen nicht unbedingt in der Entity-Klasse eingebaut werden, sondern diese können auch in einer externen Listener-Klasse vorhanden sein.
Wir bauen uns mit Hilfe der Callback-Methoden eine Protokollierung, mit der wir mitschreiben, welche Operationen die JPA auf unserer Datenbank ausführt.
Auch auf den Zustand von Entity-Objekten lässt sich zugreifen. So kann abgefragt werden, ob diese schon vollständig aus der Datenbank geladen worden sind oder nicht.
OR-Mapping lässt sich nicht nur mit Annotationen durchführen, sondern auch mit beschreibenden XML-Dateien. Da das Mapping über Annotationen jedoch sehr viel komfortabler ist, ist das Mapping mit XML Geschichte, kann einem jedoch in Legacy-Projekten begegnen.
Früher oder später muss jede Applikation Daten dauerhaft abspeichern. Man nennt diesen Vorgang "Persistieren". Sehr gerne wird dies durch die Nutzung von Datenbanken getan. Geht man für das Schreiben und Lesen von Daten den manuellen Weg, so sind SQL-Statements zu formulieren, die die Daten zwischen der Datenbank und der Objektwelt händisch synchronisieren. Ein solcher Code kann bei komplexeren Systemen sehr aufwändig werden.
Gerade an dieser Stelle schafft die Java Persistence API (JPA) für Abhilfe. Sie bietet die Möglichkeit an, Java-Objekte automatisch über einen Aufruf ohne das manuelle Schreiben von SQL-Statements in die Datenbank zu mappen, um sie dorthin zu schreiben und auch wieder zu lesen.
Dieser Kurs stellt die Nutzung der Java Persistence API (JPA) vor und versetzt den Teilnehmer in die Lage, diese API effektiv für seine Projekte einzusetzen. Es lauern nämlich diverse Herausforderungen auf den Entwickler, sowohl wenn er manuell vorgeht, wie auch wenn er mit Hilfe der Java Persistence API vorgeht:
Der Kurs richtet sich an den Einsteiger in die Java Persistence API (JPA). Allerdings führt er auch in komplexe Themengebiete ein, so dass der Teilnehmer zum Experten wird. Java-Kenntnisse werden für diesen Kurs vorausgesetzt.
Der Kurs fokussiert sich nicht allein auf die Theorie, sondern hält eine Balance zwischen den theoretischen Grundlagen und der praktischen Anwendung. Auf der praktischen Seite kommt Eclipse als Entwicklungsumgebung und Hibernate als JPA-Implementierung zum Einsatz. Die Daten werden in einer Oracle Express Datenbank gespeichert, welche eine speicherlimitierte Version zur großen Oracle-Datenbank darstellt.