延迟加在问题

延迟加载问题:

代理对象执行延迟查询时,由于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 关系属性

由于关系表的数据在连接查询中已经得到,所以之后就没有必要延迟加载了

关系属性也不需要生成代理对象了

优点:更灵活一些

posted @ 2015-12-24 15:26  墨瞋  阅读(93)  评论(0)    收藏  举报