Lors de la création de requêtes nommées dans JPA, existe-t-il une meilleure pratique acceptée pour les noms de ces requêtes (par exemple EntityName.allActive
ou findAllActiveFoos
etc.) et est-il bon de déclarer ces requêtes nommées dans les classes d'entités ils interrogent ou tous ensemble dans une classe d'utilité?NamedQuery: Meilleures pratiques
Répondre
Non, il n'y a pas de meilleure pratique largement acceptée qui couvre tous les cas complexes. En général, il n'y a pas beaucoup de guides de style disponibles pour JPA. Ce qui semble être communément accepté, et généralement utilisé dans les livres, est de lancer une requête avec le nom de l'entité.
J'irais pour EntityName (pour garantir des noms uniques dans l'unité de persistance) combiné avec l'opération et les arguments.
- Person.findByAge
- Person.findByAgeAndFirstName
- Person.removeByFirstName
- Person.updateSalaryIfYearBornBefore
Tout comme une note, la spécification utilise with
au lieu de by
dans les exemples, et ne requête de préfixe avec le nom de l'entité. Mais c'est bien sûr la spécification, pas le guide de style.
Je trouve bon de déclarer des constantes pour ces noms de requêtes, puis d'utiliser ces constantes dans @ NamedQuery.name et em.createNamedQuery. Étant donné que @NamedQuery, @NamedNativeQuery et @NamedQueries ne peuvent être appliqués qu'à une super-classe ou à une entité mappée, vous ne pouvez pas les localiser dans la classe d'utilitaires.
Je crois que 'Entity.camelCaseWhatItDoesName' est une bonne pratique. Dans le passé, plusieurs clients ont adopté ce style. – Kawu
Bien qu'il ne semble pas y avoir de meilleure pratique acceptée au niveau mondial, le livre "Pro JPA 2" de Mike Keith et Merrick Shincariol recommande exactement ce que Mikko a dit, par ex. Si vous avez une requête pour trouver tous les employés, appelez-le "Employee.findAll".
Pour les déclarer, encore une fois, il n'y a pas vraiment de meilleure pratique d'après ce que je peux voir. Ils semblent avoir tendance à préférer les déclarer sur l'Entité elle-même plutôt que tous dans une grande classe (comme une base MappedSuperclasse à partir de laquelle s'étendent toutes vos entités) car cela deviendrait très vite monolithique et pourrait être un peu difficile à maintenir. Une autre option consiste à les déclarer dans un fichier XML séparé, pas que je recommanderais cela. Personnellement, j'aime l'approche où ils sont déclarés sur l'Entité à laquelle ils sont liés. Je suis également d'accord avec la suggestion de Miko d'utiliser des constantes pour le nom, vous pouvez simplement définir toutes ces constantes dans une classe séparée.
en aparté, une bonne pratique qui est fortement recommandée pour les requêtes nommées est d'utiliser des paramètres nommés par opposition aux paramètres de position. Cela rend les requêtes beaucoup plus faciles à travailler. – brent777
- 1. Meilleures pratiques Android Meilleures pratiques
- 2. Efficacité HTML, meilleures pratiques
- 3. SSRS Meilleures pratiques
- 4. ThreadPool Meilleures pratiques, Correct
- 5. NAnt meilleures pratiques
- 6. Meilleures pratiques Google Maps?
- 7. Dénomination DataContext Meilleures pratiques
- 8. meilleures pratiques d'organigramme
- 9. Meilleures pratiques Maven
- 10. java meilleures pratiques constructeur
- 11. C#: Meilleures pratiques Debug.Print
- 12. Exceptions - Les meilleures pratiques
- 13. Meilleures pratiques DataBindingSource
- 14. CodeSchool: Rails Meilleures pratiques
- 15. marge des meilleures pratiques
- 16. UITableView Meilleures pratiques
- 17. tables Lookup meilleures pratiques
- 18. Authentification modèle - meilleures pratiques
- 19. Meilleures pratiques NHibernate Transactions
- 20. Meilleures pratiques LDAP
- 21. Meilleures pratiques ASP.NET MVC
- 22. Meilleures pratiques constructeurs
- 23. Selenium, Nunit Meilleures pratiques?
- 24. ExtJs meilleures pratiques
- 25. Meilleures pratiques UDDI
- 26. meilleures pratiques Surcharger
- 27. Meilleures pratiques d'énumération
- 28. Meilleures pratiques SLF4J
- 29. Meilleures pratiques INotifyPropertyChanged
- 30. Meilleures pratiques d'animation Iphone
Réponse associée: http://stackoverflow.com/a/4948333/1725096 –