zoukankan      html  css  js  c++  java
  • 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 方法有什么作用  :       把对象从游离状态转换为持久化状态

      

  • 相关阅读:
    2020Java面试题及答案,刷这些题,准没错!
    作为一个面试官,我想问问你Redis分布式锁怎么搞?
    你说研究过Spring里面的源码,循环依赖你会么?
    一口气说出 6种 延时队列的实现方案,面试稳稳的
    我可真是醉了,一个SpringBoot居然问了我30个问题
    最强Dubbo面试题,附带超级详细答案
    平安银行Java社招五面面经,目前最全面的,38个面试题以及答案
    Java电子书高清PDF集合免费下载
    Python处理json模块的详细介绍
    用Python写一个“离线语音提示器”来提醒我们别忘记了时间
  • 原文地址:https://www.cnblogs.com/shaoxiaohuan/p/7919403.html
Copyright © 2011-2022 走看看