Que faut-il utiliser: JPQL ou API critères?

mon application Java utilise JPA pour la persistance des objets. Le domaine des affaires est très simple (seulement trois classes sont persistantes, avec 3-5 propriétés dans chaque). Les requêtes sont simples. La question Est de savoir quelle approche je devrais utiliser: JPQL ou API critères?

61
demandé sur Pascal Thivent 2010-10-04 23:22:54

3 réponses

je suis assez sûr que cela a déjà été couvert ici sur donc, mais je ne pouvais pas trouver la question existante. Donc, voici mon point de vue sur la question:

  • je trouve les requêtes JPQL plus faciles à écrire/lire.
  • je trouve l'API de critères agréable pour construire des requêtes dynamiques.

ce qui est essentiellement ce que vous trouverez dans hibernation: critères vs. HQL .

mais il y a une différence majeure entre L'API critères JPA 2.0 et L'API critères Hibernate qui vaut la peine d'être mentionnée: L'API critères JPA 2.0 est une API de typesafe et donne ainsi des vérifications de temps de compilation, l'achèvement de code, un meilleur support de reconfiguration, etc. Cependant, i ne trouvent pas que les avantages l'emportent sur la facilité d'utilisation de JPQL.

pour résumer, je préférerais JPQL, sauf pour les requêtes dynamiques (par exemple pour les multicritères les fonctions de recherche).

questions connexes

plus de ressources

69
répondu Pascal Thivent 2017-05-23 12:34:40

j'ai répondu à une question similaire précédemment et je vais re-post ma réponse ici pour le bénéfice de la communauté. Je vais supposer que vous utilisez un serveur D'Application vis-à-vis de ma réponse ci-dessous.

L'API critères existe pour permettre la construction de requêtes SQL dynamiques d'une manière qui évite L'injection SQL. Sinon, vous concaténeriez les chaînes SQL ensemble, ce qui est à la fois sujet aux erreurs et un risque de sécurité: C'est-à-dire L'Injection SQL. Que serait être la seule fois où vous souhaitez utiliser L'API critères.

si la requête reste essentiellement la même mais n'accepte que des paramètres différents, vous devez utiliser @NamedQueries annotées qui sont plus simples, précompilées, peuvent être mises en cache dans le cache secondaire et éventuellement validées lors du démarrage du serveur.

c'est essentiellement la règle empirique concernant les requêtes critères par rapport à @NamedQueries. D'après mon expérience, il est rare que vous ayez besoin de L'API critères. mais il est bon qu'il existe pour les rares fois où elle est nécessaire.

Espérons que cette aide.

4
répondu sagneta 2016-01-30 20:20:17

je pense que vous pouvez également envisager un autre nouveau cadre comme:

"151930920 De La Requête" Dsl

Objet De La Requête

Torpille Requête

cela vous donne un type de façon sûre et intelligente pour construire des requêtes, ne sont pas standard, mais je suis sûr que la prochaine norme sera basée sur une de ces technologies.

si vous voulez restez sur les normes ignorez cela.

bye

-3
répondu tglman 2013-10-14 15:25:11