延迟加载

延迟加载(lazy load)是Jpa的对象关联默认加载方式。主要是为了避免加载对象的同时加载其关联的对象,避免无畏的开销,当我们真正需要数据的时候,才真正的执行加载。
延迟加载的有效期在session生命周期内,当session关闭执行SQL语句会报nosession异常,解决这个问题有两种方法:
1.延长session生命周期。
service层调用持久层方法链接数据库进行操作。调用开始到结束,是连接数据库session的生命周期,假如对相关联,查询到的是关联对象的属性信息,没有实质的内容,前台页面需要数据,获取该对象的值,会再次进行数据库查询,可这个时候数据库连接已断开,SQL语句执行失败,这就是nosession异常。在springboot中,war项目自动集成springmvc并配置OpenSessionInViewFilter,它是利用过滤器的方式完成session生命周期的延长,请求时打开session,响应结束关闭session。这就有效的保证了前台页面获取数据的时候在此次请求区间完成了渲染页面的工作。
2.改变加载方式为立即加载
在关联属性上面添加fetch=FetchType.EAGER,改懒加载为立即加载,表示取出这条数据的时候它关联的数据也同时放到内存中,任何时候都可以取。

在实际开发中,我们还是选择默认懒加载方式,需要获取属性的时候在进行再次加载,如果使用立即加载,那么所有关联的信息都被加载,而这些信息可能并不是我们需要的,就会造成资源浪费,加重程序压力。

注意:延迟加载的应用请求,必须是分别进行的select语句,因为多表查询实质还是一张表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值