zoukankan      html  css  js  c++  java
  • hibernate对象的三种状态及转换

    hibernate对象的三种状态转换关系图

            

    三种状态

    瞬时状态transient

      通过new创建对象后,对象并没有立刻持久化,  它并未参与数据库中的数据有任何的关联,此时java对象的状态为瞬时状态。session对瞬时状态的对象一无所知,当对象不再被引用时,她的数据也就丢失了, 对象将会被java虚拟机按照垃圾回收机制处理。

    持久状态persistent

      当对象与session关联,被session管理时,它就处于持久化状态。处于持久状态的对象拥有数据库的标志。对象什么时候与session建立联系的?

             1)通过session查询的接口,或者get,或者load方法从数据库中加载对象的时候

             2)瞬时状态的对象,通过调用save或者saveorupdate方法时处于持久状态的对象,session会持续跟踪和管理他们,如果对象的内部状态发生了任何更改,hibernate会选择合适的时机(如事务提交时)将变更固化到数据库中。              

     游离状态Detached

         处于持久状态的对象,脱离与其session 的管理后,对象就处于游离状态。  执行sessionevict,clear,close()方法后,可以将持久状态变为游离状态

      session提供了两个方法(updatemerge)将处于游离状态的对象,与一个新的session关联,此时对象的状态就重新变回持久状态。

    状态转换:

    1.瞬时状态转换为持久状态

       使用sessionsave()或者saveorupdate()方法保存对象后,变为持久状态

         使用session对象的get或者load方法获取对象,,该对象的状态是持久状态。

     2.持久状态转为瞬时状态

          执行sessiondelete()后,变为瞬时状态 

     3.持久状态转换为游离状态

       执行了sessionevict(),clear()或者close()方法后

       

    4.游离状态转为持久状态

        重新获取session对象,执行session对象的update或者saveorupdate()后,变为持久状态

      

    5.游离状态转为瞬时状态

       执行sessiondelete()后,对象有游离状态转为瞬时状态。

     

    状态前后发生变化的对象称为脏对象

    脏检查: 提交事务的时候,hibernate会对session中持久状态的对象检查,看数据是否发生了变化

    目的: 保证内存中的数据对象和数据库表的数据一致

    刷新缓存机制:

      1.执行事务的commit方法的时候,可以刷新缓存

      2. 执行session.flush()方法

     

     

  • 相关阅读:
    Keep at Most 100 Characters
    Larry and Inversions
    计算指数
    简单题
    重要的话说三遍
    I Love GPLT
    猜数字
    打印沙漏
    多态性(polymorphism),封装性(encapsulation),内聚(cohesion)以及耦合(coupling)的基本概念
    Hibernate面试题
  • 原文地址:https://www.cnblogs.com/wuxinyiwu/p/7488868.html
Copyright © 2011-2022 走看看