zoukankan      html  css  js  c++  java
  • 框架的三种状态

    瞬时状态(Transient)

    通过new创建对象后,对象并没有立刻持久,他并没有与数据库打交道,此时状态为瞬时状态。

    持久状态(Persistent)

    当对象与session关联,被Session管理时,它处于持久状态,处于持久状态的对象拥有数据库标识,有两种方法通过Session

    get()方法,或者是load()方法重数据加载数据的时候,第二种瞬时状态,Session的save()方法或SaveorUpdate()方法时,Java对象与Session发生关系。

    对于处于持久状态的对象,Session会持续跟踪和管理,如果Hibernate会选择合适的时机(处理提交时)。

    游离状态(Detached)

    处于持久状态的对象,脱离于其关系的Session的管理后,对象处于游离状态,处于这种状态,Hibernate无法保证对象所包含的数据库的记录一致,因为Hibernate

    已经不能做任何操作。Session提供了两个方法(update()merge())。

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

    使用Session对象save()或saveOrUpdate()方法保存对象后。

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

    2.持久状态为瞬时状态

    执行Session对象的delete()方法后,对象由原来的持久状态变为瞬时状态,因为此时对象没有任何数据库数据关联。

    3.持久状态为游离状态

    执行了Session对象的evict(),clear()或close()方法,对象由原来的持久化转为游离状态。

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

    重新获取Session对象,执行Session对象的update()或saveOrUpdate()方法,对 象游离状态转为持久状态,该对象再次与Session对象相关联。

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

    执行Session对象的delete()方法,对象游离状态转为瞬时状态。

    处于瞬时状态或游离状态的对象不在被其他对象引用时,会被Java虚拟机按照垃圾回收机制处理。

    脏查询及刷新缓存机制

    在Hibernate中,状态前后发生变化的对象,称为脏对象。

    当事物提交时,Hibernate会对Session中持久状态的对象进行检测,判断对象的数据是否发生改变,这就称为脏检查。

    当Session刷新缓存时,会进行脏检查,即比较Dept对象的当前的值类型的属性复制一份快照。

    tx=session.beginTransaction();

    //获取部门对象,Dept对象处于持久状态。

    Dept dept=(Dept)Session.load(Dept.class,new Byte("11"));

    dept.setDname("质管部“);

    tx.comit();

    刷新缓存机制

    1.当应用程序调用Transaction的commit()方法时commit()方法先调用session的刷新缓存方法flush(),然后再向数据库提交事务。

    2.当应用程序显示调用Session的flush()方法时,刷新缓存。

    Session的flush()方法和Transaction的commit()方法区别:flush()方法进行刷新缓存操作,执行一系列的sql语句,但不会提交事务;commit()方法先调用flush()方法,然后提交事务。

    提交事务意味着对数据库 所做的更新被永久保存下来。

  • 相关阅读:
    129. Sum Root to Leaf Numbers
    113. Path Sum II
    114. Flatten Binary Tree to Linked List
    112. Path Sum
    100. Same Tree
    300. Longest Increasing Subsequence
    72. Edit Distance
    自定义js标签库
    JS 实现Table相同行的单元格自动合并示例代码
    mysql 高版本only_full_group_by 错误
  • 原文地址:https://www.cnblogs.com/xiaoyu1997/p/6270285.html
Copyright © 2011-2022 走看看