zoukankan      html  css  js  c++  java
  • 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();
    }
  • 相关阅读:
    Spring Boot应用程序属性
    Spring Boot Bean和依赖注入
    Spring Boot构建系统
    Spring Boot Tomcat部署
    Spring Boot引导过程
    Spring Boot快速入门
    Spring Boot简介
    eclipse中将项目打包成jar的两种方法,及其问题与解决方法
    配置Zuul代理下游的认证
    WireMock和Spring MVC模拟器
  • 原文地址:https://www.cnblogs.com/fengmingyue/p/6169606.html
Copyright © 2011-2022 走看看