所以我有2个hibernate pojos如下
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 * ),我将为每个所有者填充猫。但是 select * 会非常昂贵,因为所有者表也有 60 多个与许多其他表有外键关系的列。我想使用投影来仅选择所需的列,以便查询执行得更快。如果我添加投影和/或别名,我会得到所有者但没有猫(每个所有者的猫为空)。
我已经为此搜索了很多解决方案,尝试了所有方法来创建标准中的别名和投影,甚至尝试使用自定义 ResultTransformers。当我使用投影时,这些似乎都不起作用。
还有其他人遇到过类似的问题吗?有任何想法吗?