Hibernate 懒加载问题

大喵哥 发布于 2013/08/30 11:09
阅读 263
收藏 0
<many-to-one name="supAuthFunction" class="AuthFunction" 
			 insert="true">
	<column name="parentID">
	   <comment>父模块编号</comment>
	</column>
</many-to-one>

测试方法


AuthFunction authFunction=(AuthFunction) baseService.loadByPK(AuthFunction.class, 2l);
               System.out.println( "-----"+authFunction);
               System.out.println( "-----"+authFunction.getSupAuthFunction().getFunctionName());//这里不打印,org.hibernate.LazyInitializationException: could not initialize proxy - no Session


如果设置为fetch="join" 或者outer-join="true" 再或者lazy="false" 才可以加载supAuthFunction对象成功。

many-to-one不能懒加载么?


one-to-many


<set name="authRoleFunctionMaps" lazy="true" fetch="select" inverse="true">
	<key column="functionID" />
	<one-to-many class="AuthRoleFunctionMap" />
</set>
AuthFunction authFunction=(AuthFunction) baseService.loadByPK(AuthFunction.class, 2l);
               System.out.println( "-----"+authFunction);
               Set authRoleFunctionMaps=authFunction.getAuthRoleFunctionMaps();
               System.out.println(".........................."+authRoleFunctionMaps.size());
也是报no session or session was closed的错误



事务配置到Service这一层,如果我在action里面或者jsp里面要使用

authRoleFunctionMaps 或者 supAuthFunction 对象,那不是不能获得到他们的值

网上看有人说用OpenSessionInViewFilter这个,但是又说可能会产生比较大的资源开销?

难道这个是我配置的不对?这个一般都怎么解决?

加载中
0
子木007
子木007
只用 hibernate 的 单表操作。关联关系都自己维护,用啥取啥。   然后这个世界就太平了
小虫0302
小虫0302
我也不太用关联(开销太大了),只用单表操作,
0
kidbei
kidbei

Hibernate.initialize(要代理的对象);

没咋用过hibernate,但是记得有这么个方法,就能解决这个问题。

也不推荐使用,普遍的办法是OpenSessionInViewFilter,这样能延长事务,开长事务确实有性能问题,或者不使用getCurrentSession,使用openSession,自己控制sessison的打开和关闭,这样就不会出现这个问题,但是貌似hibernate官方不推荐openSession吧,自己掂量吧,理解原理就行了。

kidbei
kidbei
回答已经修改了
大喵哥
大喵哥
这个方法 我知道 难道只能这样用这个方法 或者加那个过滤器?
返回顶部
顶部