hibernate伴随程序员生涯的异常(LazyInitializationException),即no session异常

懒加载分为三种情况:类的懒加载,集合的懒加载,manytoone的懒加载

懒加载是针对从数据库查询数据的性能而言


性能

lazy

需要数据的时候才要加载(懒加载(优化的一种方式 )即延迟加载----用谁就加载谁

类的懒加载

注意:查询是不要开启事物的

根据主键提取数据有session.get(.....)/session.load(*.class,1L)

 

 

调试时,箭头指向的代码,代表这句代码开始执行,跳到下一句,才代表上一句代码执行完成

 


        session.load方法产生的是代理对象,该代理类是持久化类的子类

 

       

 

 

 

 

所谓懒加载,也就延迟加载,也是一种优化,上面当执行完load所在的一句代码,classes变量还并没有得到值,什么时候需要,就什么时候把查出来的Classes对象给classes变量,比如:上面需要classes.getName()属性,此时执行这句同时前马上就会执行一条查询1L这个对象的sql语句把值赋给classes变量,否则没有这句classes.getName()Classes对象查询出来会延迟到关闭session,即关闭与数据库的连接,不得不把该Classes对象查询出来

 

laze=”false”就没有懒加载机制,下面标记部分执行完,就会执行查询数据库的语句,classes变量就会有值,后面的能够得到name属性值,不会报,no sesion


 

集合的懒加载

/**

 * 集合的延迟加载

 *    <set lazy="true">

 */

public void testCollection_Lazy_true(){

Session session = sessionFactory.openSession();

Classes classes = (Classes)session.get(Classes.class, 1L);

Set<Student> students = classes.getStudents();//发出加载Classes  sql语句

for (Student student : students) {//发出加载学生的sql语句

System.out.println(student.getName());

}

session.close();

}

 

   set的延迟加载:

       true

       false

       extra

   说明:

       1、因为延迟加载在映射文件设置,而映射文件一旦确定,不能修改了。

       2、延迟加载是通过控制sql语句的发出时间来提高效率的。

 

 

当lazy=”extra” 执行sql语句更高

/**

 *     select

        count(sid)

    from

        Student

    where

        cid =?

2

 */

@Test

public void testCollection_Lazy_extra(){

Session session = sessionFactory.openSession();

/**

 * 加载了classes又加载了student

 */

Classes classes = (Classes)session.get(Classes.class, 1L);

Set<Student> students = classes.getStudents();

System.out.println(students.size());

session.close();

}

manytoone的懒加载

     对于性能来说,没有什么影响,所以随便怎么样都行



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值