病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,而后你使用了,致使该异常。web
简单理解就是由于,你使用了lazy=true,这样hibernate在从数据库中调数据的时候是不会把关联的对象查出来的,而是保存一个获取值得方法,在你使用getXXX()调用的时候,hiberante会利用这个保存的方法去从数据库中取数据。而每每咱们在jsp页面中使用getXXX()准备展现数据的时候,session早已经在dao中就关闭了,咱们该如何解决这种异常呢?spring
解决方法有三种:
1.把lazy设成false,最简单,可是效率下降。
2.在web.xml中加入以下数据库
3用 left join fetch 或 inner join fetch 语法:
例如:select distinct t from Tuser t left join fetch t.troles role where t.id = :idsession