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.
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.