在多对多延迟加载的时候,获取用户对对应的角色时发现延迟加载无作用,已经配置了OpenSessionInViewFilter,居然没用。
从开启tomcat后从页面上进去action然后进入Service这时候延迟加载有作用,正常的。
但是我在spring中配置init-method执行某个方法时延迟加载就失效了,提示:no seession,session被关闭之类的话。在得到session的时候如果用getCurrentSession,就会报这种错误,改成openSession()后全部正常,但是这样做肯定不可以,太影响性能。这可怎么办?碰到这么诡异的问题。

解决方案 »

  1.   

    用这个方法:getCurrentSession,那以后所有的session要你自己去处理,如果你没关,那就没有关了。
      

  2.   

    User类:public class User extends IdEntityAUTO {
         //其他省略
         private List<Role> roleList =new ArrayList<Role>();    @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
         @JoinTable(name = "user_role", joinColumns = { @JoinColumn(name = "userid") }, 
          inverseJoinColumns = { @JoinColumn(name = "roleid") })
    }
    //Role类
    public class Role extends IdEntityAUTO {
    //其他略
    private List<User> userList = new ArrayList<User>();
    @ManyToMany(mappedBy="roleList")
    public List<User> getUserList() {
    return userList;
    }}
    <bean id="hahaha" class="com.util.web.LoadResc" init-method="load"></bean>
    load方法public void load(){
        List<User> userList = userServiceImpl.findAllUser() ;
        for(User user : userList) {
        user.getRoleList;//这句的时候就报session已经关闭
    }
    }
    web.xml中已经在最开始就配置了:
    hibernateOpenSessionInViewFilter
      

  3.   

    init-method 是初始化bean的时候调用的,hibernateOpenSessionInViewFilter对他来说没什么作用。
      

  4.   

    hibernate的问题吧,延迟加载。
      

  5.   

      不知道楼主是用hibernate哪个版本的,是2.5的还是3.0以上的,好象那个getCurrentSession()是hibernate3.0以上才提供了实现!具体不清楚,详细的自己可以去查下资料!
      

  6.   


    我用的是3.3.2~~好像是的,通过spring启动openviewfilter就不起作用了,这下该怎么办?
      

  7.   

    可以考虑下的
    session这个东西本来就不好用