hibernate一级缓存session之get和load的区别

本文通过实例对比了Hibernate中get与load方法的区别,get方法会在找不到对象时直接返回null,而load方法则返回一个代理对象。当尝试访问该代理对象的属性时,如果Session已关闭,则会抛出异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

 

@Test

    public void r(){

         session = getSession();

     Transaction tr = session.beginTransaction();

     /**

      * User user = (User) session.get(User.class,7);---首先从session缓存中找有没有id7user对象

      * 因为没有所以

      * tr.commit();提交后就会发送sql语句将id7的记录查出来生成一个user对象

      * 因此在执行user时不会报错

      * */

     // User user = (User)session.get(User.class, 7);

     /**

      * User user = (User) session.load(User.class,8);--首先从session缓存中找有没有id8user对象

      * 因为没有所以

      * tr.commit();提交后不会发送sql只会一个带id=8user代理对象,如图

      * 执行user时因为除了要用id属性,还要用其它的属性,正常情况下此时会发送sql去数据库查id8的记录,但因为此时session已经关闭,所以会报请如图:

      *

      * */

       User user = (User) session.load(User.class, 9);

     tr.commit();

     closeStream(sessionFactory, session);//关闭sessionFactory,session资源

     System.out.println(user);

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值