2009-05-27 5 views

Répondre

13
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

Voir aussi https://forum.hibernate.org/viewtopic.php?t=941669

+0

On devrait plutôt envisager d'obtenir des résultats distincts en utilisant une requête de base de données (par exemple, SELECT DISTINCT (xyz) à partir de X) au lieu d'utiliser Criteria.DISTINCT_ROOT_ENTITY. Veuillez noter que Criteria.DISTINCT_ROOT_ENTITY obtient les résultats uniques des objets en mémoire (et non de la base de données), ce qui peut être coûteux pour les grands ensembles de résultats. – Philipp

6

Une solution plus souple peut être:

criteria.setProjection(Projections.distinct(Projections.property("property"))); 
+0

Bien sûr, vous vouliez dire "Projections.distinct" – speshak

+0

Je l'ai fait, joliment repéré. – waxwing

+2

Vous pouvez éviter d'utiliser Projection.distinct, car il a le désagrément indésirable de réduire le jeu de résultats à cette seule propriété. – user959690

1

dépend de votre requête/critères. si vous fournissez un identifiant unique, vous pouvez appeler criteria.uniqueResult() sinon vous appelez criteria.setMaxResults (1) et appelez criteria.uniqueResult()

Questions connexes