hibernate get/load区别

本文探讨了Hibernate框架中load与get方法的区别。load采用延迟加载机制,仅获取代理对象,实际属性查询时才发送SQL;get则立即执行SQL查询并返回完整对象。此外,两种方法在处理不存在的数据时的表现也有所不同。

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

  public static void testload(){  
	   /**
	    * 通过load的方式加载对象时,会使用延迟加载机制,此时得到的Student对象其实是一个代理对象
	    */
	   Student stu =(Student)session.load(Student.class,1);
	   System.out.println(stu);//可以打个断点看看,有个代理对象。

//如果没这条数据会空指针
Student s =(Student)session.load(Student.class,100);
	   System.out.println(s);//org.hibernate.ObjectNotFoundException: No row with the given identifier exists
   } 
public static void testget(){
        Student stu=(Student)session.get(Student.class, 1);
        System.out.println(stu);//可以打个断点看看,全部都有值。

//没数据会报找不到对象
  Student s=(Student)session.get(Student.class, 100);
        System.out.println(s);//null
   }
load get的区别:
1.当使用get方法加载获取对象时,它会第一时间执行SQL到数据库查询,整个对象给返回出来。
   当使用load方法加载获取对象时,不会立即到数据库查询,只是得到一个proxy对象(里面有个属性handler值是一个id)当要查询其他属性时间,也就是session.load(stu.name);这时才会发送SQL去查询。
2.当id不存在,查不到数据时,两个方法返回信息也不一样。


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值