`
yutaozxy
  • 浏览: 69021 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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方法中就可以顺利执行.

分享到:
评论

相关推荐

    hibernated的线程同步问题

    本篇文章将深入探讨在使用Hibernate时可能会遇到的线程同步问题,以及 Hibernate 中的 session.get() 和 session.load() 方法的异同。 一、Hibernate的并发控制 在多线程环境下,多个线程同时访问和修改数据库记录...

    Hibernate开发指南

    4. **持久化操作**:详细讲解增删改查(CRUD)操作,包括Session接口的使用,如save()、saveOrUpdate()、update()、delete()、get()和load()方法。同时,还会涉及Query和Criteria API来执行复杂查询。 5. **关联...

    java面试题

    Hibernate Session的get与load方法有什么区别? - **get**:若找不到对应的记录,则返回null。 - **load**:若找不到对应的记录,则抛出`ObjectNotFoundException`异常。 #### 20. Hibernate lazy机制是如何体现...

    最新Java面试宝典pdf版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试宝典-经典

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    java面试题大全(2012版)

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 12、...

    Java面试宝典2012版

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 122 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 122 11、iBatis与Hibernate有什么不同? 122 ...

    java面试宝典2012

    9、hibernate中的update()和saveOrUpdate()的区别,session的load()和get()的区别。 133 10、简述 Hibernate 和 JDBC 的优缺点? 如何书写一个 one to many 配置文件. 133 11、iBatis与Hibernate有什么不同? 133 12、...

Global site tag (gtag.js) - Google Analytics