问这个问题可能有些...,但是看到网上说的都不一致,所以在这边发个帖子,确定一下。疑问点是在自由状态转换为持久状态的过程中,
在网上查了下,
有的说执行save或saveOrUpdate方法后,变为持久状态。
但是有的观点说持久状态是需要在session里面有,而且数据库里面也要有。
这样的话就有些矛盾了,如果在save以后,不commit的话,数据库中肯定是不会有数据的。怎么会算做是持久状态呢?举个笔试题的例子:(9)对于以下程序,Customer对象在第几行变为持久化状态?(单选)Customer customer=new Customer(); //line1customer.setName(\"Tom\"); //line2Session session1=sessionFactory.openSession(); //line3Transaction tx1 = session1.beginTransaction(); //line4session1.save(customer); //line4tx1.commit(); //line5session1.close(); //line6A) line1 B)line2 C)line3 D)line4 E)line5 F)line6答案却是D,请各位给个正确的答案。谢谢

解决方案 »

  1.   

    我觉得应该是E在line6之后关闭后才成为了游离状态,之前都是持久状态。commeit后就成了游离状态了。
      

  2.   

    try
    {
    session = HibernateUtils.getSession();
    tx = session.beginTransaction();
    // 临时状态
    user = new User();
    user.setName("李智雅");
    user.setPassword("987654");
    user.setBirthDate(new Date());
    // 持久化状态
    session.save(user);
    user.setName("王新兰");
    tx.commit();
    }
    catch (Exception e)
    {
    e.printStackTrace();
    tx.rollback();
    }
    finally
    {
    HibernateUtils.closeSession(session);
    }
    // 游离状态
    user.setPassword("123456");
    try
    {
    session = HibernateUtils.getSession();
    tx = session.beginTransaction();
    // 持久化状态
    session.update(user);// 必须显式调用update()
    user.setName("励志哥");
    tx.commit();
    }
    catch (Exception e)
    {
    e.printStackTrace();
    tx.rollback();
    }
    finally
    {
    HibernateUtils.closeSession(session);
    }
    }
      

  3.   

     
    HibernateUtils.closeSession(session);之后就是游离状态 
    调用save或update之后就是持久化状态
      

  4.   

    会进行账数据检查 不commit如果缓冲中有 数据库最后也会添加
      

  5.   

    我只是想知道在进行了save或saveOrUpdate以后是变为持久化还是commit以后变为持久化
      

  6.   

    很久没有来,那这个时候数据库中会有数据么?
    这个时候还没有commit啊,难道是autocommit的缘故。
      

  7.   

    不会吧,不commit数据库中也有,jdbc是这样的么?