Existe-t-il un moyen de créer une requête distincte dans HQL. Soit en utilisant le mot-clé «distinct» ou une autre méthode. Je ne sais pas si distinct est un keywork valide pour HQL, mais je recherche l'équivalent HQL du mot-clé SQL "distinct".
100
Il est à noter que le
distinct
mot - clé en HQL ne correspond pas directement audistinct
mot - clé en SQL.Si vous utilisez le
distinct
mot - clé dans HQL, alors Hibernate utilisera parfois ledistinct
mot-clé SQL, mais dans certaines situations, il utilisera un transformateur de résultat pour produire des résultats distincts. Par exemple, lorsque vous utilisez une jointure externe comme celle-ci:Il n'est pas possible de filtrer les doublons au niveau SQL dans ce cas, donc Hibernate utilise a
ResultTransformer
pour filtrer les doublons une fois la requête SQL effectuée.la source
faire quelque chose comme ça la prochaine fois
la source
Vous pouvez également utiliser
Criteria.DISTINCT_ROOT_ENTITY
avec la requête Hibernate HQL.Exemple:
la source
J'ai eu quelques problèmes avec les transformateurs de résultats combinés aux requêtes HQL. Quand j'ai essayé
ça n'a pas marché. J'ai dû transformer manuellement comme ceci:
Avec Criteria, les transformateurs fonctionnaient très bien.
la source
Ma requête principale ressemblait à ceci dans le modèle:
Et je n'obtenais toujours pas ce que je considérais comme des résultats «distincts». Ils étaient simplement distincts en fonction d'une combinaison de clés primaires sur la table.
Ainsi , dans le
DaoImpl
j'ai ajouté un changement d' une ligne et a fini par obtenir le retour , je voulais « distinct ». Un exemple serait au lieu de voir 00 quatre fois, je le vois maintenant une seule fois. Voici le code que j'ai ajouté auDaoImpl
:J'espère que cela a aidé! Encore une fois, cela peut ne fonctionner que si vous suivez des pratiques de codage qui implémentent le type de projet service, DAO et modèle.
la source
Supposons que vous ayez une entité client mappée à la table CUSTOMER_INFORMATION et que vous souhaitiez obtenir la liste des prénoms distincts du client. Vous pouvez utiliser l'extrait ci-dessous pour obtenir la même chose.
J'espère que cela aide. Nous utilisons donc ici group by au lieu d'utiliser un mot-clé distinct.
Aussi, auparavant, j'ai trouvé difficile d'utiliser un mot-clé distinct lorsque je veux l'appliquer à plusieurs colonnes. Par exemple, je veux obtenir une liste de firstName distincts, lastName puis group by fonctionnerait simplement. J'ai eu du mal à utiliser distinct dans ce cas.
la source
J'ai une réponse pour Hibernate Query Language pour utiliser des champs distincts. Vous pouvez utiliser * SELECT DISTINCT (TO_CITY) FROM FLIGHT_ROUTE *. Si vous utilisez une requête SQL , elle renvoie une liste de chaînes. Vous ne pouvez pas l'utiliser comme valeur de retour par classe d'entité. La réponse pour résoudre ce type de problème est donc d'utiliser HQL avec SQL .
À partir de l' instruction de requête SQL , il a obtenu DISTINCT ROUTE_ID et entré sous forme de liste. Et la requête IN filtre la TO_CITY distincte de IN (List).
Le type de retour est le type Entity Bean. Vous pouvez donc le faire dans AJAX, comme le complément automatique .
Que tout va bien
la source
Vous pouvez vous le mot-clé distinct dans votre générateur de critères comme celui-ci.
Et créez le constructeur de champ dans votre classe de modèle.
la source
Si vous avez besoin d'utiliser un nouveau mot-clé pour un DTO personnalisé dans votre instruction select et que vous avez besoin d' éléments distincts , utilisez new en dehors de new comme suit:
la source
Vous pouvez simplement ajouter GROUP BY au lieu de Distinct
la source