延迟加在问题
延迟加载问题:
代理对象执行延迟查询时,由于session关闭,导致出现延迟加载异常LazyInitializationException
解决思路1:
让session尽可能晚关闭,spring提供过滤器,
进入过滤器时,打开session
service中不要关闭session
jsp 利用代理对象,进行延迟加载,显示数据
回到过滤器时,最后关闭session
解决思路2:
session仍然在service 关闭
在session关闭前,查询出所有必须的数据
a. 利用lazy="false"来解决
可以在<many-to-one lazy="false"> 让他对应的sql提前查询,不要延迟查询
<set lazy="false"> 让set对应的查询提前执行
缺点:是不够灵活,让关系属性固定为不延迟了
b. 利用连接查询来解决
hql中可以使用
from 主模型对象 inner|left join fetch 关系属性
由于关系表的数据在连接查询中已经得到,所以之后就没有必要延迟加载了
关系属性也不需要生成代理对象了
优点:更灵活一些