问题描述
现有一个一对多,我配置了lazy="true",已经设置了OpenSessionInViewFilter,但是调用时出现一些错误现有代码如下 Theme theme=((Users)session.get("user")).getTheme();System.out.println("theme.getThemePath()="+theme.getThemePath());//此处打印出来是有值的,theme不为空Set set=theme.getUsers();Iterator it=set.iterator();while(it.hasNext()){Users user=(Users) it.next();String username=user.getUsername();System.out.println(username);}执行报错:org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.struts2.entity.Theme.users, no session or session was closed但是我改成如下:却可以正常运行,Theme theme=new Theme(); theme.setId(1);theme=facadeService.themeService.getThemeFormDB(1); System.out.println("theme.getThemePath()="+theme.getThemePath());Set set=theme.getUsers();Iterator it=set.iterator();while(it.hasNext()){Users user=(Users) it.next();String username=user.getUsername();System.out.println(username);}上面如何才能应用延迟加载?谢谢!
解决方案
Theme theme=((Users)session.get("user")).getTheme(); 此步从session中获得user,再从user中获得theme应该都不在当前session中,所以无法再通过懒加载获得theme的user请参考
解决方案二:
引用是不是你的OpenSessionInViewFilter的顺序不对,要再struts2和你的字符过滤器之前。
解决方案三:
是不是你的OpenSessionInViewFilter的顺序不对,要再struts2和你的字符过滤器之前。可以参考http://blog.csdn.net/fhwbj/archive/2009/03/25/4022805.aspx如果不行,可以把事务配制成REQUIRED试试。