所以我有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多列與許多人再次有其他表的外鍵關係。預測將有助於大幅縮短查詢執行時間。 –
編輯答案包括一個可能的解決方案,讓我知道你在想什麼。 –