我得到了这样的事情:休眠左加入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