Ответ 1
По умолчанию ResultTransformer для запроса Criteria, который не использует setProjections(), будет ROOT_ENTITY
.
Если у нас есть Студент в отношениях ManyToMany с Департаментом, запрос может выглядеть так:
Session session = (Session) getEntityManager().getDelegate();
Criteria crit = session.createCriteria(Student.class)
.createAlias('departments', 'department');
Этот запрос будет возвращать дубликаты. Но установите ResultTransformer
как...
crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
Теперь результаты будут отличаться, когда Hibernate отображает результаты. (Или я имею в виду unmarshalls?)
Если вы не хотите, чтобы Hibernate возвращал запрос как List<Student>
, но предпочитал обрабатывать результаты как List<Object[]>
, а затем
crit.setResultTransformer(CriteriaSpecification.PROJECTION)