public static void main(String[] args) {
User user = new User();
user.setBirthday(new Date());
user.setName("wang.beyond");
addUser(user);

User user1 = getUser1(user.getId());
System.out.println("id: "+user1.getId());
System.out.println("name: "+user1.getName());
System.out.println("birthday: "+user1.getBirthday());
System.out.println("end");
}
-----------------------------------------
          /**
 * 用懒加载的方法得到数据操作
 * */
static User getUser1(int id){
Session  s = null;
Transaction tx = null;
try {
/**生成session*/
 s = HibernateUtil.getSession();
User user = (User)s.load(User.class, id);
System.out.println("id: "+user.getId());
return user;
}finally{
if(s != null)
s.close();
}
}为什么在懒加载函数User user = (User)s.get(User.class, id); 后面加一句System.out.println("id: "+user.getId()); 在main函数就能取到相应的数据了
有人说加载了user.getId()就表示告诉hibernate这个时候要读取数据 我把System.out.println("id: "+user.getId()); 删了 main函数里面还是有类似的方法 为什么就不能取到数据?

解决方案 »

  1.   

    因为你的session已经关闭了
    离开了getUser1方法 session就关闭了
      

  2.   

     后面加一句System.out.println("id: "+user.getId()); 在main函数就能取到相应的数据了
    根本就没关系  只有在session生命周期内 user.getName() user.get...后才会去查询数据库
      

  3.   

    lz要明白hibernate中调用get方法首先是出一级缓存中去取数据,如果没有在会去数据库中进行查询。所以当楼主执行了get方法之后就会去缓存中找,如果有就取出来,如果没有就直接想数据库发送sql语句,所以在出现了楼主的这种情况,楼主注意hibernate中get方法与load的区别,
      

  4.   

    懒加载的我的看法。。
    spring容器在最开始不是要把里边所有的bean要初始化吗?
    设置为lazy为true后,就不初始化这个bean,等到用到它的时候在进行加载,也可以理解为是一种合理利用资源的方式吧,等到用的时候才用!
      

  5.   

    Session的生命周期你知道吗?
    Session只有在持久的状态时才能等到数据,
    游离状态时是不能取到数据的。static User getUser1(int id){
    Session s = null;
    Transaction tx = null;
    User user = new User();//初始化
    /**生成session*/
    s = HibernateUtil.getSession();
    user = (User)s.load(User.class, id);//这时的user处于游离状态;
    System.out.println("id: "+user.getId());
    s.close();
    return user;//持久的试试行不。
      

  6.   

    懒加载与Hibernate从数据库中查出来的对象的状态有关:瞬时对象,持久对象,脱管对象。去网上搜索这几个相关的信息,相信你会理解得更好。
      

  7.   

    LZ要好好学习的对象的几个状态的转变!这样对HIBERNATE的理解将会更加的深刻!
      

  8.   

    1、Transient 透明状态
    2、Persistent 持久化状态
    3、Detached 托管状态
    save、update操作时  1-->2  3-->2 也就是持久化操作
    delete、clear、close操作时  2-->1 2-->3 持久化状态转为透明或托管状态