项目:创新学分认定系统
问题来源:想通过保存在session里的一的一方(College)去拿到多的一方的list(Major)
<span style="font-size:14px;">College college = (College) session.getAttribute("mycollege");//从session里拿到专业对应的学院</span>
通过session.getAttribute拿到对象
<span style="font-size:14px;">List<Major> majorlist = this.schoolService.getAllMajorByCollegeId(college);</span>
<span style="font-size:14px;">request.setAttribute("majorlist", majorlist);//准备显示学院id对应的专业的list数据
</span>
再去通过拿到的college对象去查找它对应的多的一方的list,结果报懒加载异常,刚开始以为是拦截器配置错误,后发现配置并没问题
由此猜想通过session.getAttribute拿到的对象状态有问题,进一步发现,该对象的一般属性,id,name都能直接拿到,一旦牵扯关联关系就报懒加载异常
于是把它的id拿出来,再找id对应的college再去找多的一方,发现一切正常。
<span style="font-size:14px;">List<Major> majorlist = new ArrayList<Major>(this.getCollegeById(id).getMajors());//此处的id是从session.getAttribute拿到的对象的id</span>
猜想:通过session.getAttribute拿到对象并非持久化的对象,与数据库的代理连接已断开,只能拿到其基础属性,而不能去拿和它有关联关系的对象,
要拿的话就需要通过重新建立持久化对象去拿。