Dans un projet JPA, j'ai besoin d'afficher une table dont les données proviennent de 5 entités associées. Sans JPA, je pouvais écrire une requête sql qui relie les 5 tables de base de données et les filtre selon certains critères. Supposons que les champs impliqués dans les critères de filtrage sont uniquement ceux de la première entité. Utilisation de JPA Je peux charger des instances filtrées de la première entité et naviguer dans les propriétés jusqu'à l'entité finale. Ma préoccupation est de cette façon le nombre de requêtes à la base de données peut exploser si je ne peux pas utiliser ou faire une erreur avec l'annotation fecttype = eager. Quelle est la meilleure approche dans de tels cas? Je voudrais avoir un contrôle strict sur les requêtes sql qui seront exécutées, donc je peux les optimiser, mais si j'écris la requête sql avec les jointures à la main, dois-je utiliser le 'old' resultset pour récupérer les données ?Affichage efficace des résultats de plusieurs jointures
Répondre
Vous pouvez utiliser la langue de JPA requête intégrée, le JPQL, ne peut pas vous? (Il a un opérateur JOIN à coup sûr.) Sachez cependant que ce n'est pas du SQL standard, seulement quelque chose de similaire, alors lisez attentivement les docs JPQL. Oui, il s'agit encore de requêtes en texte brut incorporées dans du code Java, ce qui est dommage, mais bon, voilà jusqu'où Java peut aller en supportant le processus de développement.
Le principal avantage est que vous obtenez des objets entité à la suite de vos requêtes - même si vous avez encore besoin de les jeter de l'objet. Vous pouvez également utiliser les objets (enregistrements) et leurs variables membres (attributs) directement dans la chaîne de requête. Il s'agit donc d'une amélioration par rapport à l'ancien bon JDBC.
Sinon, vous pouvez également choisir l'API de critères, mais franchement, mes expériences ne sont pas très bien avec elle. La syntaxe est assez horrible et vous finissez par construire vous-même la requête de bas niveau. C'est clairement Java à son pire ... mais au moins les requêtes contenant des chaînes peuvent être éliminées du code. Je ne suis pas sûr que ça en vaille la peine.
Cocher cette page pour plus d'informations et des exemples:
Je suis d'accord sur les critères API, un vrai cauchemar pour les débutants. Mon idée est la suivante: créer une vue 'freak' avec très peu de lignes juste pour en créer une entité (appelons-la summarydata). Créez une requête JPQL avec des jointures et ajoutez des conditions de filtrage dynamiques. Convertissez-le en summarydata et publiez-le dans un jsf h: datatable. Ça devrait marcher, n'est-ce pas? – Filippo
- 1. efficace requête SQL avec des sous-requêtes et plusieurs jointures
- 2. Postgres - Plusieurs jointures provoquent des résultats incorrects dans ma requête
- 3. MySQL Query plusieurs jointures avec des résultats incorrects
- 4. plusieurs à plusieurs avec des jointures
- 5. Affichage des résultats de plusieurs requêtes dans une table
- 6. Affichage des résultats PHP?
- 7. Plusieurs à plusieurs jointures
- 8. Plusieurs jointures mysql
- 9. Regroupement SQL avec plusieurs jointures combinant incorrectement les résultats
- 10. SQLite et MySQL - Query même - Les différents résultats - plusieurs jointures
- 11. Accès efficace des résultats ordonnés dans Cassandra
- 12. Plusieurs jointures de tables
- 13. Affichage des résultats aléatoires PHP
- 14. Affichage des résultats SQL groupés
- 15. Affichage des résultats d'une SPLongOperation
- 16. MySQL group_concat avec 2 jointures renvoie des résultats non désirés
- 17. Ajout des résultats de plusieurs sélections SQL?
- 18. Affichage efficace des enregistrements sur la grille
- 19. Utilisation de plusieurs jeux de résultats combinés avec des jointures dans T-SQL
- 20. Affichage des résultats verticalement dans Oracle
- 21. Plusieurs jointures SQL
- 22. fusion des valeurs de colonne dans plusieurs à plusieurs jointures
- 23. instructions orderby sur plusieurs jointures
- 24. Count dans plusieurs jointures
- 25. Affichage des résultats de la requête CAML?
- 26. UISearchbar Problèmes de contrôleur, affichage des résultats?
- 27. Affichage des résultats de la requête SQL
- 28. Plusieurs jointures conditionnelles
- 29. Comment avoir plusieurs tables avec plusieurs jointures
- 30. Compte avec plusieurs jointures
Pouvez-vous créer View est sur votre base de données? –
oui, je peux. Malheureusement, les critères de filtrage sont dynamiques, donc je ne peux pas les mettre dans une vue, ou simplement je ne sais pas comment le faire. Ma préoccupation concerne le processus de filtrage: si je crée d'abord la vue puis la filtre, je dois rejoindre une très grande table, pas seulement les lignes qui m'intéressent. Veuillez lire également le commentaire sur la réponse ci-dessous. – Filippo
Ok, utiliser ensemble des vues statiques et des requêtes dynamiques peut être risqué. Pouvez-vous proposer plus d'informations sur le framework ou la base de données? –