session.get()和session.load()的区别

get() ----不支持LAZY
  1. User user = (User)session.get(User.class"402880d01b9bf210011b9bf2a2ff0001");
当调用上面的方法时,马上发出查询sql,加载User对象
  1. user.setName("龙哥");
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
  1. User user = (User)session.get(User.class"asdfsafsdfdsf");
  2. System.out.println("user.name=" + user.getName());
采用get加载数据,如果数据库中不存在相应的数据,返回null,它不会抛异常
load()----支持LAZY
  1. User user = (User)session.load(User.class"402880d01b9bf210011b9bf2a2ff0001");
不会发出查询sql,因为load方法实现了lazy(懒加载或延迟加载)
hibernate延迟加载实现原理是代理方式
  1. System.out.println("user.name=" + user.getName());

延迟加载:只有真正使用这个对象的时候,才加载(发出sql语句)
  1. user.setName("发哥");
persistent状态,当属性发生改变的时候,hibernate会自动和数据库同步
  1.  User user = (User)session.load(User.class"55555555");
  2. System.out.println("user.name=" + user.getName());
  3. //采用load加载数据,如果数据库中没有相应的数据
  4.   //那么抛出ObjectNotFoundException
综 上所述,使用load和使用get方法都是可以找到相应的对象的,但发出sql语句的时机不一样,get是在调用get方法时就会发出sql语句,而 load在调用load方法时并不会发出sql语句,只有在调用该查询出来的对象的属性时才会发出sql语句,而当找不到结果时,get得出的结果是 null,但并不会抛异常,load则会抛出异常
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值