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.