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()方法,然后提交事务。

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

  • 相关阅读:
    CLR 对比 JVM
    unity drawcall测试
    UGUI 分页渐变居中效果
    几个ADB常用命令
    jQuery分步步骤
    jquery toast插件
    jQuery数字滚动(模拟网站人气、访问量递增)原创
    jQuery实用工具集
    scrollReveal.js – 页面滚动显示动画JS
    jquery轻量级数字动画插件jquery.countup.js
  • 原文地址:https://www.cnblogs.com/xiaoyu1997/p/6270285.html
Copyright © 2011-2022 走看看