2009-05-27 18 views

Respuesta

13
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

Ver también https://forum.hibernate.org/viewtopic.php?t=941669

+0

Hay que tener en cuenta en lugar de obtener resultados distintos utilizando una consulta de base de datos (por ejemplo, SELECCIONE DISTINCT (xyz) de X) en lugar de usar Criteria.DISTINCT_ROOT_ENTITY. Tenga en cuenta que Criteria.DISTINCT_ROOT_ENTITY obtiene los resultados únicos de los objetos en la memoria (y no de la base de datos), lo que puede ser costoso para grandes conjuntos de resultados. – Philipp

6

Una solución más flexible puede ser:

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

Por supuesto que quería decir "Projections.distinct" – speshak

+0

Lo hice, muy bien visto. – waxwing

+2

Es posible que desee evitar el uso de Projection.distinct porque tiene el desagradable efecto secundario involuntario de reducir el conjunto de resultados a solo esa propiedad. – user959690

1

depende de sus consultas/criterios. si proporciona un identificador único que puede llamar criteria.uniqueResult() de lo contrario se llaman criteria.setMaxResults (1) y llamar a criteria.uniqueResult()

Cuestiones relacionadas