Ich bin mir ziemlich sicher, dass dies hier auf SO bereits behandelt wurde, aber ich konnte die vorhandene Frage nicht finden. Also, hier ist mein Standpunkt zu der Frage:
- Ich finde JPQL-Abfragen einfacher zu schreiben / lesen.
- Ich finde die Kriterien-API gut zum Erstellen dynamischer Abfragen.
Welches ist im Grunde, was Sie in Hibernate: Criteria vs. HQL finden .
Es gibt jedoch einen wesentlichen Unterschied zwischen der JPA 2.0-Kriterien-API und der Hibernate-Kriterien-API, der erwähnenswert ist: Die JPA 2.0-Kriterien-API ist eine typsichere API und bietet somit Überprüfungen der Kompilierungszeit, Code-Vervollständigung, bessere Unterstützung für Refactoring usw. Ich jedoch Finden Sie nicht, dass die Vorteile die Benutzerfreundlichkeit von JPQL überwiegen.
Zusammenfassend würde ich JPQL bevorzugen, außer für dynamische Abfragen (z. B. für Suchfunktionen mit mehreren Kriterien).
Verwandte Fragen
Mehr Ressourcen
JPQL
, dass ich den alten Thread wiederbelebt habe, aber ich sollte ihn nicht so weit wie möglich vermeiden. Ich sage nicht, dass es eine schlechte Praxis ist, JPQL zu verwenden, sondern ich sage nur, wenn etwas mit Kriterien getan werden kann, sollte dies ohne JPQL geschehen. Ich bitte Sie nur demütig um mehr Klarheit, indem Sie Ihre Präferenz für JPQL gegenüber Kriterien in Frage stellen.Ich habe zuvor eine ähnliche Frage beantwortet und werde meine Antwort hier zum Nutzen der Community erneut veröffentlichen. Ich gehe davon aus, dass Sie einen Anwendungsserver für meine Antwort unten verwenden.
Die Kriterien-API ermöglicht die typsichere Erstellung dynamischer SQL-Abfragen, die eine SQL-Injection verhindern. Andernfalls würden Sie SQL-Zeichenfolgen miteinander verketten, was sowohl fehleranfällig als auch ein Sicherheitsrisiko darstellt: z. B. SQL Injection. Dies wäre das einzige Mal, dass Sie die Kriterien-API verwenden möchten.
Wenn die Abfrage im Wesentlichen dieselbe bleibt, aber nur unterschiedliche Parameter akzeptieren muss, sollten Sie Anmerkungen verwenden,
@NamedQueries
die einfacher und vorkompilierter sind, im sekundären Cache zwischengespeichert und möglicherweise während des Serverstarts überprüft werden können.Dies ist im Grunde die Faustregel für Kriterienabfragen im Vergleich zu
@NamedQueries
. Nach meiner Erfahrung benötigen Sie die Kriterien-API selten, aber es ist gut, dass sie für die seltenen Fälle vorhanden ist, in denen sie erforderlich ist.Hoffe das hilft.
quelle
Ich denke, Sie können auch ein anderes neues Framework in Betracht ziehen, wie:
Abfrage Dsl
Objektabfrage
Torpedo-Abfrage
Dies gibt Ihnen eine typsichere und intelligente Möglichkeit, Abfragen zu erstellen. Dies ist kein Standard, aber ich bin mir ziemlich sicher, dass der nächste Standard auf einer dieser Technologien basieren wird.
Wenn Sie auf den Standards bleiben möchten, ignorieren Sie dies.
Tschüss
quelle