病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中,而后你使用了,致使该异常 web
1 解决方案一 spring
在相应的配置文件中设置 lazy=‘false’ lazy顾名思义是“懒” ,就是当加载当前对象的时候是否加载与之关联的对象,当 lazy=‘false’ 时候 是加载, 默认是lazy=‘true’ 不加载 当你须要的时候在发起sql请求 sql
不过这方法的弊端在于 ,会把全部与之相关的数据多加载进来会形成内存浪费 缓存
2 或者使用 fetch="join" 默认是抓取内链接, 他就是强制在加载对象的时候一次加载与之关联的内容放到缓存区 中,当再次取得时候不会在发起sql请求 ,无论你链接是否关闭同样能够取出来; 它的原理: 就是采用链接方法将相关联的对象一次加载,覆盖其设置的 lazy 属性 服务器
Hibernate:
select
this_.ID as ID0_1_,
this_.S_ID as S2_0_1_,
this_.S_CJ as S3_0_1_,
students2_.ID as ID1_0_,
students2_.NAME as NAME1_0_,
students2_.AGE as AGE1_0_
from session
on this_.S_ID=students2_.ID
-------------------------------------
org.pojo.Students@6835fb
3 web.xml 文件中 设置过滤器针对每次请求,延迟关闭session时间,只有当服务器将信息返回给用户时链接才关闭, app
<!-- 处理session 关闭问题 -->
<filter> fetch
<filter-name>opensession</filter-name>
<filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter this
</filter-class>
</filter>
<filter-mapping>
<filter-name>opensession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url
我只知道这几种方式 嘿嘿