OpenSessionInView的确是可以解决hibernate在懒加载上的问题,让session绑定在request上,当request到达时创建session,在request结束,view显示完毕时,关闭session.这样可以等需要的时候,再发送请求,拿到数据,减少了内存利用率,也提高了效率!
但是,这样的设置,也带来了其他一些方面的问题!
OpenSessionInView 让hibernate生命周期边长,从request-->Controller---->service---->dao-->db-->dao--service---controller----request----view,在这个环节必须全部完成,不然,session就不换被关闭!假如这个环节中的任何一个操作出现问题,session将会占用的同时,Connection将不能被回收,数据库连接是有限的,
所以个人觉得:
设置many一方为lazy这个是很正常的一件事,没理由我想知道一个班级在几楼而需要把所有学生数据都弄出来,这样是不正确的;解决这个问题,我的方法还是,不用OpenSessionInView,数据需要的时候再去获取,我宁愿再去访问一次,再发一次请求,也不愿把hibernate生命周期延长