4 持久化对象生命周期

    1. 准备工作:准备如下数据库表一张,方便说明问题。主键设置为自动增长
      id                  int(11)                  NOTNULL
      name            varchar(30)         NOTNULL
      age               int(11)                  NOTNULL
      address        varchar(255)        NULL

      Student实体类和映射文件与第一节类似不再重述。

    2. 瞬时状态

      Student stu=new Student();
      stu.setName(“SomeOne);
      stu.setAge(18);

      这里的stu和hibernate框架以及数据库完全没关系,程序运行时,它仅仅被放入内存,程序结束就消失 

    3. 持久状态
      对于Hibernate纳入实体管理容器的对象,我们则定义为对象处于持久态
      exp:

      public static void main(String[] args) {
      Session session = HibernateSessionFactory.getSession();

      Student stu1 = new Student();
      stu1.setName("某王");
      stu1.setAge(18);
      Student stu2 = new Student();
      stu2.setName("LiLittleDragon");
      stu2.setAge(19);
      /** 

      * 上面创建了两个对象,这两个对象(stu1,stu2)都处于瞬时状态 

      */

      Transaction tx = session.beginTransaction();

      session.save(stu1);

      /**

      *此时已经将stu1存入session

      *stu1已经Hibernate容器所管理因此处于持久态

      *需注意虽然已经处于瞬时态

      *但是因为事务还没有提交(还没有调用commit()方法)

      *所以数据库中并没有存在数据,

      *stu2此时仍是是瞬时态

      */

      tx.commit(); 

      /*

      *stu1的数据已在数据库中

      */

      tx=session.beginTransaction();

      stu1.setName("LeafAsk"); 

      tx.commit(); 

      /*因为session未被关闭,所以stu1依然处于持久化状态,因此

      *再commit(),数据库中数据库中stu1的名字会变成叶问,但是stu2还是瞬时态

      */

      HibernateSessionFactory.closeSession();

      /*运行程序会出现一条insert和一条update*/

       

      }

    4. 游离状态

      处于 Persistent 状态的对象,其对应的 Session 实例被关闭之后,那么,此对象就处于 Detached 状态

      public static void main(String[] args) {

      Session session=HibernateSessionFactory.getSession(); Student stu=new Student();
      stu.setName("xxx");
      stu.setAge(25);
      Transaction tx=session.beginTransaction(); session.save(stu);
      tx.commit(); HibernateSessionFactory.closeSession();//这里session被关闭,对象变为游离态
      System.out.println(stu.getId());

       

       

      }

       

    5. 游离状态与瞬时状态的两点区别

      区别在于游离状态的对象可以再次与有个Session进行关联而成为持久对象

      public static void main(String[] args) {

      Session session = HibernateSessionFactory.getSession();
      Student stu=new Student();
      stu.setName(“one");
      stu.setAge(25);
      Transaction tx = session.beginTransaction();
      session.save(stu);
      tx.commit();
      HibernateSessionFactory.closeSession(); //session被关闭,对象变为游离态
      session = HibernateSessionFactory.getSession();//session被重新打开
      tx = session.beginTransaction(); 
      session.update(stu);//stu重新与session关联,称为持久态
      stu.setName("two"); 
      tx.commit(); 
      HibernateSessionFactory.closeSession();

       

       

      }

    6. VO与PO

      有时候,为了方便,我们也将处于瞬时状态和游离状态状态的对象称为 VO(Value Object)值对象,而处于持久化状态的对象称为 PO(Persistent Object)

posted @ 2018-10-25 20:19  疯狂的橙子  阅读(83)  评论(0)    收藏  举报