JPA Mastery · HTL Leonding
0 / 89
0%
📅
🔥 0
0
🔁 Wiederholen
DBI/NVS JPA Basics Entity & Keys
Modul 1 abgeschlossen — Entity-Grundlagen sitzen! Weiter zu Column Mapping.
📦
Modul 01 · Tier 1–3
Entity & Primärschlüssel
Die Basis-Annotationen jeder persistenten Klasse.
💡 Warum wichtig? Ohne @Entity und @Id weiß JPA nicht einmal, dass diese Klasse existiert. Diese Annotationen sind in jeder HTL-Aufgabe und Matura-Prüfung vorhanden — sie sind das Fundament.
0 / 10
DBI/NVS Column Mapping
Modul 2 abgeschlossen! Weiter zu EntityManager.
📊
Modul 02 · Tier 1–3
Column Mapping & Datentypen
Von @Column bis @Lob — wie JPA Java-Typen auf SQL abbildet.
💡 Warum wichtig? In der Praxis sind fehlendes nullable=false oder falscher Enum-Typ häufige Bugs. @Transient verhindert, dass berechnete Felder versehentlich persistiert werden.
0 / 11
DBI/NVS EntityManager
Modul 3 abgeschlossen! Weiter zu Relationships.
⚙️
Modul 03 · Tier 1
EntityManager & Lifecycle
Der zentrale Einstiegspunkt zu JPA — Zustände, Transaktionen und CRUD.
💡 Warum wichtig? Jede JPA-Operation läuft über den EntityManager. Das Lifecycle-Modell (NEW → MANAGED → DETACHED → REMOVED) ist Kern der mündlichen Matura-Prüfung.
// EntityManager — Zustandsübergänge
NEW ──→── persist() → in Context aufnehmen MANAGED ──→── remove() → zum Löschen markiert MANAGED ──→── detach() → aus Context entfernt DETACHED ──→── merge() → neue managed Kopie MANAGED ──→── flush() → SQL sofort ausführen MANAGED ──→── refresh() → DB-Stand neu laden
0 / 12
DBI/NVS Relationships
Modul 4 abgeschlossen! Weiter zu Vererbung.
🔗
Modul 04 · Tier 1–2
Relationships
Beziehungen zwischen Entities — die häufigste Fehlerquelle in JPA-Projekten.
💡 Warum wichtig? mappedBy falsch gesetzt → doppelte Join-Tabellen. orphanRemoval vergessen → Datenmüll. EAGER statt LAZY → N+1-Query-Problem.
0 / 12
DBI/NVS Vererbung
Modul 5 abgeschlossen! Weiter zu JPQL & NamedQuery.
🌳
Modul 05 · Tier 2–3
Vererbung & Performance
InheritanceType-Strategien, N+1 Problem, JOIN FETCH — testentscheidend.
💡 Warum wichtig? Die Wahl der Inheritance-Strategie beeinflusst Performance drastisch. SINGLE_TABLE ist schnell aber NULL-lastig; JOINED ist normalisiert aber JOIN-intensiv.
0 / 10
DBI/NVS JPQL & NamedQuery
Modul 6 geschafft! Weiter zu JPQL Vertieft
🔍
Modul 06 · Tier 1–2
JPQL & NamedQuery
Von createQuery zu @NamedQuery — Named & Positional Parameters.
💡 Warum wichtig? JPQL mit @NamedQuery ist die zentrale Abfragetechnik im Test. Path-Navigation (f.plane.seats), Fetch Join mit WHERE und Parameter-Binding (:named vs ?1) kommen direkt in der Angabe vor.
// JPQL Parameter-Typen
TypSyntaxBeispiel
Named:paramNameWHERE b.lastName = :name → setParameter("name", "Smith")
Positional?1, ?2WHERE p.pType = ?1 → setParameter(1, "Airbus 380")
NamedQuery@NamedQuery(name=, query=)em.createNamedQuery("Flight.findByOp", Flight.class)
Fetch JoinJOIN FETCHSELECT f FROM Flight f JOIN FETCH f.bookings WHERE …
MEMBER OF:x MEMBER OF cWHERE :tire MEMBER OF p.tireTypes
0 / 12
DBI/NVS Abfragen JPQL Vertieft
JPQL gemeistert! Weiter zur letzten Stufe: Konfiguration & Lifecycle.
🔍
Modul 07 · Tier 1–2
JPQL Vertieft
JOIN FETCH, Aggregate, NamedQuery mit MEMBER OF & Positional Parameters.
💡 Warum wichtig? JPQL ist die Abfragesprache von JPA — objektorientiert statt SQL-tabellenorientiert. JOIN FETCH verhindert N+1-Desaster, TypedQuery macht Code sicher, Paginierung ist in jeder REST-API nötig. Matura-Themen: JPQL-Syntax, Aggregate, Bulk-Operationen.
0 / 14
DBI/NVS Konfiguration Konfig & Lifecycle
🎓 Alle 8 Module abgeschlossen! Du bist maturareif für JPA — viel Erfolg am 23. Juni! 🚀
⚙️
Modul 08 · Tier 1–3
Konfiguration & Lifecycle
persistence.xml, Hibernate-Properties, @Column-Mapping und Lifecycle-Callbacks.
💡 Warum wichtig? Ohne persistence.xml läuft kein JPA-Projekt. hibernate.show_sql, connection.url und schema-generation sind Pflicht im Test. @Column(name=) mappt Java-Felder auf abweichende Spaltennamen — z.B. flightoperator.
0 / 10
📋 JPA Cheat Sheet
Entity-Grundlagen
@EntityKlasse als JPA-Entity markieren
@Table(name=)Tabellennamen überschreiben
@IdPrimärschlüssel-Feld
@GeneratedValuestrategy: IDENTITY, SEQUENCE, AUTO
nicht finalEntity-Klasse darf nicht final sein
No-Arg Konstr.Parameterloser Konstruktor (public/protected)
@EmbeddableKlasse als einbettbar markieren
Column Mapping
@Column(...)name, length, nullable, columnDefinition
@TransientFeld nicht persistieren
@LobCLOB (String) oder BLOB (byte[])
@AccessAccessType.FIELD oder PROPERTY
BigDecimalExakter Typ für Geldbeträge
@EnumeratedSTRING (Textname) oder ORDINAL (Position)
EntityManager
em.persist(e)NEW → MANAGED
em.find(C,id)Laden per PK
em.merge(e)DETACHED → neue MANAGED Kopie
em.remove(e)MANAGED → REMOVED
em.refresh(e)DB-Stand neu laden (überschreibt lokale Änderungen)
em.flush()SQL sofort ausführen
tx.rollback()Transaktion rückgängig (im catch!)
em.clear()Context leeren (alle → DETACHED)
Relationships
@OneToOne1:1-Beziehung (Default: EAGER!)
@OneToManymappedBy, cascade, orphanRemoval
@ManyToOneFK-Seite, fetch = LAZY empfohlen
@ManyToMany@JoinTable für Zwischentabelle
@JoinColumnFK-Spaltenname definieren
CascadeTypeALL, PERSIST, MERGE, REMOVE, REFRESH
FetchType Defaults*ToOne=EAGER, *ToMany=LAZY
Vererbung
SINGLE_TABLEAlle in eine Tabelle — schnell, NULLs
JOINEDNormalisiert — JOIN nötig
TABLE_PER_CLASSEigene Tabelle je konkreter Klasse
@Inheritancestrategy: SINGLE_TABLE, JOINED, TABLE_PER_CLASS
@DiscriminatorValueTyp-Wert in Diskriminator-Spalte
JPQL & NamedQuery
createQuery(jpql)JPQL-Query (Klassenname, nicht Tabelle!)
@NamedQueryname + query auf Entity-Klasse definieren
createNamedQueryVordefinierte @NamedQuery aufrufen
:name (Named)setParameter("name", value)
?1 (Positional)setParameter(1, value)
MEMBER OF:param MEMBER OF collection
JPQL Vertieft
JOINSELECT f FROM Flight f JOIN f.plane p WHERE p.seats > 200
JOIN FETCHSELECT f FROM Flight f JOIN FETCH f.bookings
LEFT JOIN FETCH... LEFT JOIN FETCH p.behandlungen (auch leere Collections)
DISTINCTSELECT DISTINCT p FROM Patient p JOIN ... (Duplikate vermeiden)
TypedQueryTypedQuery<T> q = em.createQuery("...", T.class)
Entity als ParamWHERE b.patient = :patient (ganze Entity, nicht ID!)
SIZE() + ParamWHERE SIZE(v.patienten) > :count
AggregateSELECT COUNT(s), AVG(s.grade) FROM Student s
GROUP BYGROUP BY s.dept HAVING COUNT(s) > 5
ORDER BYORDER BY f.departureDate DESC (ASC = Default)
BETWEENWHERE b.kosten BETWEEN ?1 AND ?2
MEMBER OFWHERE :plane MEMBER OF t.planes
Konfiguration & persistence.xml
Schema-Genschema-generation.database.action = drop-and-create
SQL Logginghibernate.show_sql = true
DB-Dialekthibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
JDBC URLhibernate.connection.url = jdbc:postgresql://...
@Column@Column(name="flightoperator") → Spaltenname überschreiben
Lifecycle@PrePersist @PreUpdate @PostLoad @PreRemove
EMF (SE)Persistence.createEntityManagerFactory("myPU")
⌨️ Tastenkürzel
CtrlEnter
Aktuelles Modul validieren
Enter
Nächstes Input-Feld fokussieren
Alt
Nächstes Modul
Alt
Vorheriges Modul
Ctrl/
Cheat Sheet öffnen/schließen
?
Tastenkürzel anzeigen
Esc
Panels schließen
🎓
Zertifiziert!
HTL Leonding · DBI/NVS · JPA Mastery 2026
0
Punkte
0m
Zeit
0
Hints genutzt
0
Max. Streak
Alle 89 Aufgaben gelöst.
Viel Erfolg bei der Matura am 23. Juni 2026! 🍀
Konzept