SetResultTransformer в критериях

Что такое метод setResultTransformer в API критериев? Может ли кто-нибудь объяснить это с помощью простого примера? Я читал javadocs, но я не могу понять их четко.

Привет,

Ответы

Ответ 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)

Ответ 2

Просто: когда вы делаете Critera: вы хотите, чтобы набор результатов был в конкретном объекте, вы можете его использовать, например: eg:

 .setResultTransformer(Transformers.aliasToBean(Employee.class));

Employee должен соответствовать объекту ResultSet.