Criteria中的setResultTransformer

时间:2012-06-09 12:33:45

标签: hibernate criteria hibernate-criteria

标准API中setResultTransformer方法的用途是什么?有人可以用一个简单的例子来解释这个吗我阅读了javadocs,但我无法清楚地理解它们。

此致

2 个答案:

答案 0 :(得分:14)

不使用setProjections()的Criteria查询的默认ResultTransformer将为ROOT_ENTITY

如果我们在与Department的ManyToMany关系中有Student,则查询可能如下所示......

    Session session = (Session) getEntityManager().getDelegate();
    Criteria crit = session.createCriteria(Student.class)
        .createAlias('departments', 'department');

此查询将返回重复项。但请将ResultTransformer设为......

    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

现在,当Hibernate对结果进行编组时,结果会有所不同。 (或者我的意思是解组?)

如果您不希望Hibernate将查询作为List<Student>返回,但希望将结果作为List<Object[]>处理,那么

    crit.setResultTransformer(CriteriaSpecification.PROJECTION)

答案 1 :(得分:8)

简单地说:当您执行Criteria时:您希望结果集成为特定对象,您可以使用它:例如:

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

Employee应与ResultSet实体匹配。