Hibernate Criteria非标量值的投影

时间:2014-06-06 17:34:18

标签: java hibernate criteria projection

有没有办法使用Criteria为根实体对象投影多个值?

假设我们有这些类(使用正确的映射):

   class Boss {
        private String name;
        private List<Employee> employees;

        // setters and getters and more stuff
   }

   class Employee {

        private String name;

        // setters and getters and more stuff
   }

然后我想这样做:

   public void test() {
        Criteria criteria = this.getSession().createCriteria(Boss.class);

        criteria.createAlias("employees","employees");

        ProjectionList projectionList = Projections.projectionList();
        projectionList.add(Projections.property("name"), "name");
        projectionList.add(Projections.property("employees.name"), "subordinatesNames"); 
        criteria.setProjection(projectionList);

        criteria.setResultTransformer(new AliasToBeanResultTransformer(BossBean.class));
        List<BossBean> results = criteria.list(); // fails here
        for (BossBean bossBean : results) {
            System.out.println (bossBean);
        }
    }

这就是Bean的样子(nothign special,仅用于分组值):

public static class BossBean {
    private String name;
    private List<Strings> subordinatesNames;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Strings> getSubordinatesNames() {
        return subordinatesNames;
    }

    public void setSubordinatesNames(List<Strings> subordinatesNames) {
        this.subordinatesNames = subordinatesNames;
    }

}

例外是:

2014-06-06 13:37:38 [main] ERROR org.hibernate.property.BasicPropertyAccessor - expected type: java.util.List, actual value: java.lang.String.

我猜是在尝试适应从String根对象)返回的Boss - &gt; (A)Employee关联) - &gt; name)到List

我想自动神奇地将所有内容插入List。有没有办法使用Criteria实现这一目标?如果没有,我怎么能实现它?

提前致谢!

素不相识

维克托

0 个答案:

没有答案