Hibernate setResultTransformer in标准

Hibernate setResultTransformer in标准,hibernate,criteria,hibernate-criteria,Hibernate,Criteria,Hibernate Criteria,准则API中setResultTransformer方法的用途是什么?有人能用一个简单的例子来解释这一点吗?我读了javadocs,但不能清楚地理解它们 关于,不使用setProjections()的条件查询的默认结果转换器将是ROOT\u实体 如果我们有一个学生与系有很多关系,那么查询可能如下所示 Session session = (Session) getEntityManager().getDelegate(); Criteria crit = session.creat

准则API中setResultTransformer方法的用途是什么?有人能用一个简单的例子来解释这一点吗?我读了javadocs,但不能清楚地理解它们


关于,

不使用setProjections()的条件查询的默认结果转换器将是
ROOT\u实体

如果我们有一个学生与系有很多关系,那么查询可能如下所示

    Session session = (Session) getEntityManager().getDelegate();
    Criteria crit = session.createCriteria(Student.class)
        .createAlias('departments', 'department');
此查询将返回重复项。但将
结果变压器设置为

    crit.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
现在,当Hibernate封送结果时,结果将是不同的。(或者我是说拆封吗?)

如果您不希望Hibernate以
列表的形式返回查询,而是希望以
列表的形式处理结果,那么

    crit.setResultTransformer(CriteriaSpecification.PROJECTION)

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

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

Employee
应该与
ResultSet
实体匹配。

从文档中,我可以看到ROOT\u别名的术语:引用条件查询的“ROOT”实体的别名。在这种情况下,“根”一词代表什么?我无法理解root在本例中指的是什么。请解释,“root”代表创建Criteria实例时使用的任何类。在我的例子中,根是Student。因此,通过调用crit.list()将结果作为学生对象列表返回。除非您要求将结果转换作为投影,否则在这种情况下,它将是一个对象列表。(另外,我正在编辑我的原始示例以删除限制,以便查询将返回重复项。)工作起来很有魅力。好提示。谢谢