Hibernate SELECT DISTINCT comportement
J'espère que cette question n'est pas de dupliquer, parce que dans un autre cas, j'utilise google mal (honte sur moi) 🙂
Donc, je ne trouve pas exacte et claire réponse pour ma question: Est-ce "SELECT DISTINCT ..." dans les requêtes hql appliquée avant setFirstResult() et setMaxResults()? Je veux être calme que je ne vais pas avoir des problèmes avec la pagination dans mon application.
DISTINCT
est SQL / base de données de construction. Vous n'aurez pas de problèmes avec la pagination. Mais comme ma collègue l'a dit - si vous utilisez DISTINCTES, vous le faites mal ;). Il peut devenir lent sur les grandes tables et le même résultat peut être obtenu généralement dans une manière différente.- J'ai essayé de le faire par un autre moyen... j'ai pour valeur elementcollection et CollectionTable annotations sur le terrain (par défaut paresseux fetch) et quand j'exécute ma requête avec la clause sur cette collection que j'ai des doublons dans le jeu de résultats..
- Vous allez avoir des doublons uniquement si vous utilisez le REJOINDRE. Vous n'obtiendrez pas de doublons avec les sous-sélection.
Vous devez vous connecter pour publier un commentaire.
Pour répondre à la question, oui l'distincts de l'ensemble de résultats serait déterminé avant la limite devrait être appliqué. Le
setFirstResult()
etsetMaxResults()
méthodes sont essentiellement équivalent à unLIMIT
la clause where de la requête.Si vous utilisez à la fois vous demandez à ce que l'distinctes résultat soit limité entre l'index donné à vos deux appels à la méthode ci-dessus.
Un exemple:
Vous avez un jeu avec 100 enregistrements. Il y a 20 distinctes enregistrements trouvés pour la colonne X. Vous définissez les critères suivants:
fooList
contiendrait 10 résultats, dès le début de l'distincts de l'ensemble de résultats de 20 résultats.Si vous avez changé le ci-dessus pour
fooList
contiendrait 15 résultats en omettant les 5 premiers résultats.Il pourrait être ambigu la façon dont le résultat serait ordonné, de sorte que vous ne pouvez pas obtenir les 10 mêmes résultats à chaque fois.
SELECT DISTINCT
Lorsque le mot-clé DISTINCT est utilisé après le SÉLECTIONNER, il fonctionne comme un raccourci pour le remplacement d'une simple clause GROUP BY. Les expressions dans la liste de sélection sont utilisés directement comme l' . Les exemples suivants de SELECT DISTINCT et SÉLECTIONNEZ avec GROUP BY sont équivalentes. De la documentation de référence