Java Training Block 6 – Tag 3 JPA, JPQL

Ich nehme derzeit an einer Akademie zum Java Fullstack Software Engineer teil. In den kommenden Wochen möchte ich hier meine Mitschrift, so gut es geht, aufzeichnen und mitteilen. Hier ist das, was ich vom dritten Tag in Block 6 gelernt und behalten habe:

Wir schauen uns ein weiteres Beispiel an, die

Lager-DB

Wir haben Artikel, die gehören zu einer Warengruppe und die liegen im Lager. Folgende Beziehungen haben die drei Tabellen zueinander:

Wir haben (echte, also nicht JPQL) SQL-Dateien, die wir benutzen können um die Testdatenkanken anlegen zu können:

Hier ein Auszug aus der create.sql Datei:

In der persistence.xml werden diese SQL-Scripte aufgerufen:

In der Testklasse "Artikel" werden zuerst die Spalten definiert:

Wenn man AppTest läufen lässt, werden die Datenbanken erstellt:

Für das File-System ist das relativ sinnbefreit. Im Screenshot oben sehen wir die hsql-datenbnk unseres Trainers. Je nachdem, was in der persistence.xml eingetragen ist. Unser Trainer hat die hsql-Version (und weil er einen DB-Client installiert hat, erscheint auch die Tabelle):

Wir haben die file-Version. Wir sehen das Ergebnis nur in den Logfiles:

Durch die Bekanntgabe der Klassen werden auch Datenbanken erstellt (siehe die Doku vom Vortag):

Die Reihenfolge in der persistence.xml ist wie folgt. Zuerst wird geschaut, ob es SQLScripte gibt, die ausgeführt werden sollen:

Wenn dort keine Einträge für Scripte gefunden werden, wie oben(gestern) beschrieben, werden die Daten in die Datenbank geschrieben.

Wir öffnen das Beispielprojekt "jpa-lagerdb"

In Lager.java haben wir zwei Ids:

Das geht nur, weil wir eine eigene LagerID-Klasse erstellt haben:

Obwohl wir eine Many-To-One-beziehung haben, verwenden wir hier keine Liste. Es wird über Keys referenziert. Dazu verwenden wir @ManyToOne und @JoinColumn:

In den DAO-Klassen werden die Java Objecte via JPQL gesucht und dann mit den CRUD-Optionen in die DB geschrieben:

Wir testen nicht gegen die Model-Klassen, weil das wenig Sinn macht. Sondern wir testen nur die Logik in den DAO-Klassen. Damit brauchen wir die Model-Klassen auch nicht konterminieren.

So geht (zur Wiederholung) noch mal der parametrisierte Test:

Man kann auch alle Tests auf einmal (also mit nur einer Start-Klasse) laufen lassen. Die Klasse ruft dann die anderen Tests auf:



Disclaimer

Alles was ich mitschrieb und verstanden habe ist ohne Gewähr.

Besten Dank an unseren sehr empfehlenswerten

Trainer: Hans-Joachim Blanke blanke@4point.de

In den nächsten Tagen und Wochen geht’s weiter, so: stay tuned!

Gruß, Achim Mertens

H2
H3
H4
3 columns
2 columns
1 column
Join the conversation now