Utilisation de DISTINCT dans JPA

Avec quelle colonne DISTINCT travaille-t-il dans JPA et est-il possible de le changer?

Voici un exemple de requête JPA utilisant DISTINCT:

select DISTINCT c from Customer c 

Ce qui n’a pas beaucoup de sens – sur quelle colonne se base la distinction? Est-il spécifié sur l’entité comme une annotation parce que je n’ai pas pu en trouver?

Je voudrais spécifier la colonne pour faire la distinction, quelque chose comme:

 select DISTINCT(c.name) c from Customer c 

J’utilise mySQL et Hibernate.

Mise à jour: Voir la réponse votée en haut s’il vous plaît.

Le mien est actuellement obsolète. Seulement gardé ici pour des raisons historiques.


Distinct dans HQL est généralement nécessaire dans les jointures et non dans des exemples simples comme le vôtre.

Voir aussi Comment créer une requête distincte dans HQL

Tu es proche.

 select DISTINCT(c.name) from Customer c 
 @Entity @NamedQuery(name = "Customer.listUniqueNames", query = "SELECT DISTINCT c.name FROM Customer c") public class Customer { ... private Ssortingng name; public static List listUniqueNames() { return = getEntityManager().createNamedQuery( "Customer.listUniqueNames", Ssortingng.class) .getResultList(); } } 

Je suis d ‘accord avec la réponse de kazanaki et cela m’a aidé. Je voulais sélectionner l’entité entière, donc j’ai utilisé

  select DISTINCT(c) from Customer c 

Dans mon cas, j’ai une relation plusieurs-à-plusieurs et je veux charger des entités avec des collections en une seule requête.

J’ai utilisé LEFT JOIN FETCH et à la fin j’ai dû rendre le résultat distinct.

J’utiliserais la fonctionnalité d’expression de constructeur de JPA. Voir aussi la réponse suivante:

Expression du constructeur JPQL – org.hibernate.hql.ast.QuerySyntaxException: la table n’est pas mappée

Suivant l’exemple de la question, ce serait quelque chose comme ça.

 SELECT DISTINCT new com.mypackage.MyNameType(c.name) from Customer c