2009-05-27 2 views

ответ

13
criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 

Смотрите также https://forum.hibernate.org/viewtopic.php?t=941669

+0

Один скорее следует рассмотреть, чтобы получить отличные результаты с помощью запроса к базе данных (например, SELECT DISTINCT (xyz) из X) вместо использования критериев. DISTINCT_ROOT_ENTITY. Обратите внимание, что Criteria.DISTINCT_ROOT_ENTITY получает уникальные результаты от объектов в памяти (а не из базы данных), что может оказаться дорогостоящим для больших наборов результатов. – Philipp

6

Более гибкое решение может быть:

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

Конечно, вы имели в виду «Projections.distinct» – speshak

+0

Я сделал, красиво заметил. – waxwing

+2

Возможно, вы захотите избежать использования Projection.distinct, потому что у него есть неприятный непреднамеренный побочный эффект для уменьшения набора результатов только к одному свойству. – user959690

1

зависит от ваших запросов/критериев. если вы предоставляете уникальный идентификатор, вы можете позвонить criteria.uniqueResult() иначе вы называете criteria.setMaxResults (1) и вызовите criteria.uniqueResult()

Смежные вопросы