hibernate学习(三) hibernate中的对象状态

hibernate对象的状态分为三种:  游离状态,持久化状态,瞬时状态

下面一行代码区分:

 

 

   Configuration   cfg=new Configuration().configure();

   SessionFactory sessionFactory=cfg.buildSessionFactory();

   Session session=sessionFactory.openSession();

   Transaction    tx=session.beginTransaction();

   Person p=new Person ();  //  瞬时状态  ,没有id  ,没有与session关联  

   p.setName("zhangsan");

   p.setAge(13);

   p.setSex("男”);

   session.save(p); // 持久化状态   有id值  ,与session有关联

   tx.commit();     

   session.close(); // 游离 或托管状态   ,有id  和session无关联

  

 save () 方法:不能理解成保存,  理解成 将瞬时状态转换成持久状态的方法 

主键自增:在执行save方法时为了将对象转化为持久化状态,必须生成id值   ,必须执行insert值   

increament :执行save方法  ,为了生成id,会执行select  语句查询最大id值

 

hibernate主配置 设置      显示sql  语句,   规范sql语句;

下面操作来验证  :

    在session处设置断点  

   1.当 orm元数据配置中的主键生成策略为  navtive   (自动递增  /数据库中操作 )

   执行该断点代码 ,控制台出现   insert into   person  (name ,age ,sex)  values(?,?,?);   // id的添加由数据库操作

   2.当  主键生成策略改为  increament  (先在数据库查询最大值 ,最大值id+1    //  hibernate 操作)

   执行该断点代码  session.save()    控制台出现 select  *  from max(id)   from   person  

 

 持久化特点

 测试类 方法fn2() 部分代码:

  Person p=session.get(Person.class ,1 );  //持久化状态

  p.setName("李四");

  tx.commit();

  session.close(); // 游离状态

 

执行控制台出现

  select    *   from   person   where id=1  ;

  update person set   name=? 

 

以上情景表示 :  

持久化对象的特点:  持久化对象的任何变化 都 会自动同步到数据库中   

 

提问 那更新操作中的 update 方法有什么作用  :       把对象从游离状态转换为持久化状态

 

  

posted @ 2017-11-29 11:26  逆水行舟!  阅读(137)  评论(0编辑  收藏  举报