Question

Y at-il une méthode heuristique / meilleures pratiques / pour une décision ruleset entre les balises API Critères et NamedQuery ?

Mes pensées à ce jour:
les requêtes nommées sont généralement plus lisibles. requêtes Criteria sont plus souples.
Les deux sont précompilés. J'ai tendance à compter sur l'utilisation des requêtes nommées aussi longtemps que possible, la modification des critères.
Mais peut-être l'envie de « flexify » la requête en utilisant l'API de critères est une indication pour la conception de suboptimale (à savoir la séparation des préoccupations)?

Merci

Était-ce utile?

La solution

requêtes nommées sont plus optimales (ils sont analysés / préparés une fois). requêtes Criteria sont dynamiques, (ils ne sont pas précompilés, bien que certains fournisseurs de JPA tels que EclipseLink maintiennent un critère cache préparer).

J'utiliser des critères que pour les requêtes dynamiques.

Autres conseils

requêtes Criteria sont un bon choix quand une requête doit être générée dynamiquement, en fonction de variables et multiples critères de recherche, par exemple.

Pour les requêtes statiques, JPQL est beaucoup plus facile à lire, et je préfère les utiliser que les requêtes de critères. Vous pourriez perdre une certaine sécurité, mais les tests unitaires, vous devriez faire plus confiance.

Un autre point de vue est que, bien que la requête de critères est pas lisible, il est typé, permet donc vous compilez la vérification du type de temps. Si vous modifiez la base de données dans les projets où il y a de nombreuses entités et de nombreuses requêtes, il est vraiment utile de voir au moment de la compilation des requêtes ce qui a mal tourné à cause du changement.

D'autre part, je ne suis pas sûr qui est plus avantageux que le simpleness JPQL

En fait, je passé par la mise en veille prolongée (4.3.0-snapshot) source et le EclipseLink (2.5.0-snapshot) source et regardé à travers la mise en œuvre de l'APP dans chaque.

EclipseLink est enfilez clairement pas sûr de la façon que vous décrivez. Plus précisément, il tente de recalculer se joint à plusieurs reprises.

La mise en œuvre de Hibernate semble me sécurité de fil. Je ne suis pas sûr à 100%, mais il ne semble être. Je dirais que cela ne soit pas garanti d'être vrai dans l'avenir, car il n'est pas spécifié.

Cependant, je vous préviens, je ne pense pas que vous allez gagner beaucoup. D'après ce que je regarde, une grande partie de la compilation de la requête est en fait fait pendant la phase « CreateQuery » si vous cache même pas beaucoup de gain les résultats.

JPA fournit également un moyen pour la construction de requêtes statiques, comme des requêtes nommées, en utilisant les annotations de @NamedQuery et @NamedQueries. Il est considéré comme une bonne pratique dans JPA préférer des requêtes nommées sur des requêtes dynamiques lorsque cela est possible. De http://www.objectdb.com/java/jpa/query/api

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top