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 方法有什么作用  :       把对象从游离状态转换为持久化状态

      

  • 相关阅读:
    find
    Spring 中——————ClassPathResource初学
    Cookie 、Session、Token的学习
    JAVA注解之实现原理
    JAVA注解---2
    JAVA注解————1
    函数式遍程----Function
    java 反射的学习实践2
    Spring AOP 之动态代理源码分析
    正则表达式之Pattern.MULTILINE Pattern.DOTALL
  • 原文地址:https://www.cnblogs.com/shaoxiaohuan/p/7919403.html
Copyright © 2011-2022 走看看