所以我有2层休眠的POJO如下标准查询
class Owner{
Integer id;
String name;
Integer age;
String address;
/*
Many more fields here
*/
Set<Cat> cats;
}
class Cat{
Owner owner; //referenced from Owner.id
String color;
}
我使用的标准如下查询主表 -
Criteria criteria = session.createCriteria(Owner.class);
criteria.createAlias("cats", "cats");
ProjectionList projList = Projections.projectionList();
projList.add(Projections.property("id"), "id");
projList.add(Projections.property("name"), "name");
projList.add(Projections.property("cats"), "cats");
criteria.setProjection(projList);
criteria.setResultTransformer(Transformers.aliasToBean(Owner.class));
List<Owner> owners = (List<Owner>)criteria.list();
我需要业主的名单与他们各自的猫居住。
如果我不添加预测(这相当于选择*),我得到为每个所有者填充的猫。但select *会非常昂贵,因为所有者表具有超过60列,并且具有与其他许多表的外键关系。我想要使用投影来仅选择所需的列,以便查询执行得更快。如果我添加预测和/或别名,我得到的业主,但没有猫(每个所有者的猫为空)。
我已经搜索了很多解决方案,尝试了所有方法在条件中创建别名和投影,甚至尝试使用自定义ResultTransformers。当我使用预测时,这些似乎都不起作用。
其他人面临类似的问题?有任何想法吗?
感谢您的回复。 我更新了问题,以便更清楚。我需要各自的猫主人名单。我正在使用预测,以避免40多列与许多人再次有其他表的外键关系。预测将有助于大幅缩短查询执行时间。 –
编辑答案包括一个可能的解决方案,让我知道你在想什么。 –