• Hibernate的持久化类状态


    Hibernate的持久化类状态
      持久化类:就是一个实体类 与 数据库表建立了映射.
      Hibernate为了方便管理持久化类,将持久化类分成了三种状态.
        瞬时态 transient (临时态):持久化对象没有唯一标识OID.没有纳入Session的管理
        持久态 persistent :持久化对象有唯一标识OID.已经纳入到Session的管理(持久化持久态对象有自动更新数据库的能力)
        脱管态 detached (离线态):持久化对象有唯一标识OID,没有纳入到Session管理

    区分三种持久化对象的状态

    @Test
    // 区分持久化对象的三种状态:
    public void demo1(){
      // 1.创建Session
      Session session = HibernateUtils.openSession();
      // 2.开启事务
      Transaction tx = session.beginTransaction();
      // 向数据库中保存一本图书:
      Book book = new Book();    // 瞬时态:没有唯一标识OID,没有与session关联.
      book.setName("Hiernate开发");
      book.setAuthor("孙XX");
      book.setPrice(65d);
      session.save(book); // 持久态:有唯一标识OID,与session关联.  
      // 3.事务提交
      tx.commit();
      // 4.释放资源
      session.close();
      book.setName("Struts2开发"); // 脱管态:有唯一的标识,没有与session关联.
    }

    三种状态对象转换
      瞬时态
        获得:Book book = new Book();
        瞬时--->持久:save(book)  (save()/saveOrUpdate())
        瞬时--->脱管:book.setId(1);
      持久态
        获得:Book book = (Book)session.get(Book.class,1)  (get()/load()/find()/iterate())
        持久--->瞬时:delete(book)  (特殊状态:删除态(被删除的对象,不建议去使用))
        持久--->脱管:session.close()  (close()/clear()/evict())
      脱管态
        获得: Book book = new Book();
            book.setId(1);
        脱管--->持久:session.update()  (update()/saveOrUpdate()/lock())
        脱管--->瞬时:book.setId(null)

    持久态对象有自动更新数据库的能力(自动更新数据库的能力依赖了Hibernate的一级缓存)

    @Test
    // 测试持久态的对象自动更新数据库
    public void demo2(){
      Session session = HibernateUtils.openSession();
      Transaction tx = session.beginTransaction();
      // 获得一个持久态的对象.
      Book book = (Book) session.get(Book.class, 1);
      book.setName("Struts2开发");
      // session.update(book);//不需要写这句话,在事务提交后即可完成更新
      tx.commit();
      session.close();
    }
  • 相关阅读:
    css-深入理解margin和padding
    js的自定义事件
    jcFlexible.js的小Demo
    volatile关键字回顾
    threadLocalMap理解
    常用SQL笔记
    MyISAM和innoDB对比,覆盖索引简单回顾
    经典算法回顾:两个队列生成一个栈,两个栈生成一个队列
    Memcached与Redis对比,Redis基础笔记回顾
    ES(ElasticSearch)学习总结
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6169606.html
Copyright © 2020-2023  润新知