我有一个带有lazy="extra"
属性的一对多集合。
Class Foo {
List<Bar> barList;
}
我有一个lazy="false"
初始化的类,其中包含提到的类集合。
Class FooContainer {
List<Foo> fooList;
}
我通过服务获得FooContainer实体,因此我需要在事务中使用.size()
;
FooContainer fc = serviceImpl.getFCById(fooContainerId);
这样就初始化了fc.getFooList()。然后我只需要barList
的大小。我不需要取整个集合。
for(Foo currentItem: fc.getFooList()) {
int barSize = currentItem.getBarList().size();
}
这是LazyInitializationException出现的时候。 我试着称这种方法。
@Transactional
Class AnotherServiceImpl {
int getBarListSize(Foo foo){
return foo.getBarList().size();
}
}
但它没有用,因为没有会话。
我可以在getHibernateTemplate().getCurrentSession.initialize(foo.getBarList())
中AnotherServiceImpl
进行此操作,但我可能会抓取所有项目,这是不可接受的。
有没有办法在不提取的情况下获取集合大小?
答案 0 :(得分:0)
与评论Method where I get FooContainer fc and call .size() is the same method and it is not @Transactional
:
由于提交的事务而返回FooContainer时实体变得非托管,因此无法解析“额外”-lazy集合。如果调用方法也是Transactional也可以。
我有以下选项,您可以: