Transaction tx =session.beginTransaction();
    
      Customer cus =new Customer();
      session.save(cus);
      int id = cus.getId();
      cus=null;
      
      Customer cus2 =(Customer)session.load(Customer.class, id);
      
      tx.commit();
      session.close();
      
      System.out.println(cus2.getId());我想问的是:
    session.close();关闭之后为什么System.out.println(cus2.getId());还能得到值?
不是都关闭了吗?谢谢

解决方案 »

  1.   

    session跟Customer有关系么?要是session一关,内存中所有相关对象就变null,那还得了啊希望我说错了
      

  2.   

    session 一关闭,对象就跟数据库不同步了,不应该能取到数据的,你这太神奇了!
      

  3.   

    Hibernate是持久层框架,面向对象的方式对数据库进行DML操作。首先你要了解持久化类的三个状态以及三个状态之间的转换条件。1。瞬时状态:不带有唯一标识列的对象(简单的理解)。例如在添加之前,实例化一个类的时候就是瞬时状态
    2。持久化状态:带有唯一标识列,并且数据与数据库中的数据根据唯一标识列保持同步。(HibernateSessionFactory关闭session后变为离线状态)
    3。离线状态:HibernateSessionFactory关闭以后持久化类变为离线状态,虽然仍带有唯一标识列,但是已经不与数据库中数据保持同步。(update操作可将其从离线状态变为持久化状态)离线状态的对象仍然存在于系统内存中,长时间不用的话会被自动释放掉你这种情况是属于离线状态,在内存中对象还是存在的,所以说它的唯一标识列是可以取到的
      

  4.   

    你在session关闭前,把Session里对象的指向了另一个对象。所以,你关闭后,取的是另一个对象的属性值,当然可以!
      

  5.   

    对象cus2已经被实例化,SESSION关闭时,对其无影响。
      

  6.   

    感觉lrbyantai
     
    (蛋黄车) 说的有道理,我采纳了,谢谢