我得到了這樣的事情:休眠左加入lazycollection碰不得
Criteria crit = session.createCriteria(Parent.class,"p");
parentsList = crit.createCriteria(
"childSet","c",
JoinType.LEFT_OUTER_JOIN,
Restrictions.eq("jt.2ndParentDto.pk2ndParentDto", pk2ndParent))
.list();
我的查詢返回的父母的列表,每一個孩子或沒有,我已經測試直接登錄查詢,所以我敢肯定它。
我有找回孩子的名單,所以我加入了家長和創造的人失蹤。
List<ChildDto> list=new ArrayList<ChildDto>();
for(ParentDto item:parentsList){
Iterator<ChildDto> it=item.getChildSet().iterator();
if(it.hasNext()){
ChildDto dto = it.next();
dto.setParentDto(item);
list.add(dto);
}
else{
ChildDto dto = new ChildDto();
dto.setParentDto(item);
list.add(dto);
}
}
return list;
通過調用item.getChildSet().iterator()
休眠加載整個集合,所以我不能打電話item.getChildSet().iterator().hasNext
檢查是否有東西在一組,而我不能叫item.getChildSet().size()
既不是完全一樣的道理......
那麼如何?,還有什麼?,我目前沒有想法,如果有一個,我怎麼能得到該集的唯一項目?
更新:我只是想額外的延遲加載,但它不會是好還是壞改變...
item.getChildSet().iterator()
還是引起加載整個集合。
當我做item.getChildSet().size()
休眠觸發計數...所以我總是得到整個集合(不使用)的大小。
而這幾乎是它=/
更新:我得到了它通過得到的對象[]項目列表,並手動創建的類進行投影工作。 我不喜歡,因爲有變化的HBM,你不得不保持這樣的查詢,要做到這一點,所以我儘量避免這種儘可能。
它涉及到兩個diferent框架傳遞對象的問題,我不能沒有從一個languaje到另一個發送lazycollection,重反射導致從數據庫加載的一切,但我可以在我的例子發送代理對象,所以我我正在和他的父母建立一個兒童名單,但我甚至不能讓父母離開集合......(不可觸摸的)。 嘗試額外的懶惰抓取,讓我們看看會發生什麼。 – Ziul 2013-03-09 04:22:58