JPQL-Abfragen sind Strings — ein Tippfehler in einem Entity-Namen fällt erst zur Laufzeit auf. Die Criteria API bietet typsichere Abfragen, die der Compiler zur Kompilierzeit prüft. Ausführlicher, aber sicherer.
Grundlagen¶
CriteriaBuilder zum Erstellen von Abfragen. CriteriaQuery zur Definition von SELECT. Root für FROM. Predicate für WHERE-Bedingungen. TypedQuery zur Ausführung.
Metamodel¶
Das JPA Metamodel generiert statische Klassen (Order_, Customer_) mit Attributen als typisierte Felder. Statt des Strings „orderDate” verwenden Sie Order_.orderDate. Das Refactoring einer Entity deckt automatisch fehlerhafte Abfragen auf.
Dynamische Abfragen¶
Die Hauptstärke der Criteria API: dynamisches Zusammensetzen von Abfragen zur Laufzeit. Ein Suchformular mit 10 optionalen Filtern — in JPQL würden Sie einen String zusammenbauen. In der Criteria API fügen Sie Predicate-Bedingungen programmatisch hinzu.
JPQL vs. Criteria API¶
JPQL: lesbarer für einfache Abfragen. Criteria API: sicherer für komplexe und dynamische Abfragen. Unsere Regel: JPQL für statische Abfragen (@NamedQuery), Criteria API für dynamische Suche.
Empfehlung¶
Verwenden Sie das Metamodel — ohne es ist die Criteria API nur ausführlicheres JPQL ohne die Vorteile. Generieren Sie Metamodel-Klassen über das Maven-Plugin. Für statische Abfragen bleiben Sie bei JPQL.
Brauchen Sie Hilfe bei der Implementierung?
Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.
Kontaktieren Sie uns