Java 非标量值的Hibernate标准投影

Java 非标量值的Hibernate标准投影,java,hibernate,criteria,projection,Java,Hibernate,Criteria,Projection,是否有任何方法可以使用条件为根实体对象投影多个值 假设我们有这些具有适当映射的类: class Boss { private String name; private List<Employee> employees; // setters and getters and more stuff } class Employee { private String name; //

是否有任何方法可以使用条件为根实体对象投影多个值

假设我们有这些具有适当映射的类:

   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
   }
我猜是试图将从Bossroot object->AEmployeeassociation->namevalue返回的字符串放入列表中

我想自动神奇地把所有的东西都插入列表。有没有一种方法可以通过使用标准来实现这一点?如果没有,我怎样才能做到

提前谢谢

格雷廷斯


维克托

伙计们,我发现这篇帖子,我想,是问同样的问题。我怀疑用简单的标准是不可能做到这一点的。你必须迭代[String,String]元组并自己构造对象。但你为什么不干脆找个老板的例子,让他们的员工来呢?如果目标是重建与其中一个实体相同的结构,那么投影的意义是什么?是的,这种方法是有效的。但目标只是尝试用一种更简单的方式在一个查询中检索所有数据,并将其放在一个bean上,以便在jsp中使用,该bean与hibernate会话分离。顺便说一句:我怀疑将附加到hibernate会话的域对象发送到视图jsp有多好。纠正我,如果你知道那根本没问题的话。谢谢请记住,如果对象以惰性方式管理关联,则迭代每个对象可能会导致多个查询,每个对象一个查询。所以重点也是为了表现。但是,我的思想是开放的接受提示和更多的提示!得到了很多分数!这样做没有问题。这是推荐的方法。只需获取您需要的所有信息,即可避免太多查询:选择不同的boss from boss left join fetch boss.employees
   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);
        }
    }
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.