Hibernate中的get()和load()的异同

  先来看一个例子:

static User getUser(int id){
  User user=null;
  Session session=null;
  try{
   session=HibernateUtil.getSession();
   user=(User)session.get(User.class, id);
  }catch(HibernateException e){
   throw e;
  }finally{
   if(session!=null){
    if(session.isOpen()){
     session.close();
    }
   }
  }
  return user;
 }

class Test{

public static void main(String arg[]){

 int id=2;
  User user=Test.getUser(id);
  System.out.print(user.getName());
 }

}

执行该类不会出现异常能正确显示用户名.

static User loadUser(int id){
  User user=null;
  Session session=null;
  try{
   session=HibernateUtil.getSession();
   user=(User)session.load(User.class, id);
     }catch(HibernateException e){
   throw e;
  }finally{
   if(session!=null){
    if(session.isOpen()){
     session.close();
    }
   }
  }
  return user;
 }

class Test{

public static void main(String arg[]){

 int id=2;
  User user=Test.loadUser(id);
  System.out.print(user.getName());
 }

}

执行该方法会出现异常,报初始化异常,这是因为load()方法是用了延迟加载策略,在没有使用该对象的方法或属性之前它返回的是继承该查询对象的代理类,当真的使用到该类的实行或方法时才会发出select语句去数据库中查询数据,这里我们在loadUser()方法中没有使用该对象的属性或方法所以这里返回的是一个代理类,并且在返回代理类后我们关闭了session这个对象当我们使用该对象的属性时发出查询语句时由于session 已经关闭,所以发出异常信息,只要我们把 System.out.print(user.getName());这个语句放到loaduser方法中就可以顺利执行.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值