hibernate session的load方法和get方法

public void test() { 
          
        Teacher teacher1=new Teacher(); 
        Teacher teacher2=new Teacher(); 
          
        //有异常的load 
        /* 
        Session session=sessionFactory.getCurrentSession(); 
        session.beginTransaction(); 
        teacher1=(Teacher)session.load(Teacher.class,9); 
        session.getTransaction().commit(); 
        System.out.println(teacher1.getName()); 
        */
          
        //没有异常的load 
        Session session=sessionFactory.getCurrentSession(); 
        session.beginTransaction(); 
        teacher1=(Teacher)session.load(Teacher.class,9); 
        //这里重点,因为调用getName(),所以load方法才去读取数据库 
        System.out.println(teacher1.getName());  
        session.getTransaction().commit(); 
        System.out.println(teacher1.getName());      
          
      
        session=sessionFactory.getCurrentSession(); 
        session.beginTransaction(); 
        teacher2=(Teacher)session.get(Teacher.class,10); 
        session.getTransaction().commit(); 
        System.out.println(teacher2.getName()); 
          
  
    }

 

 总结:

  1 get方法是直接访问了数据库,当没有相应数据则返回null
  2 load方法是延迟加载,返回的是一个代理,当有调用到对象的相关方法时才访问数据库,如果没有相应数据则异常
  3 load方法得到的对象必须在session关闭前使用到,不然再访问就异常,因为它的不访问数据库了

最后记住:
  1) load延迟加载在session关闭必须先使用,不然后面就不能使用
  2) 当没有相应数据时,get返回null,load则异常

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值