zoukankan      html  css  js  c++  java
  • Hibernate-对象状态的转换

    一.hibernate对象的三种状态

      1.瞬时状态:在数据库没有对应的标识符(ID),但没有在session缓存中

      2.持久化状态:在数据库对应的标识符(ID),也在session缓存中

      3.游离状态:在数据库对应的标识符(ID),但没有在session缓存中

    二.注意的事项

      1.瞬时态 --> 持久态:可通过save(),执行完save会打印一条语句,其实是在生成ID并且该对象已经在session缓存中了,即持久态

      2.游离态 --> 持久态:可通过update()方法,只是把对象加载到session缓存,没有做其他的变化,也不会给他生成ID

      3.只有当执行commit(清理缓存)时持久化才会同步到数据库中,在此之前对象的改变不会影响对应数据库的数据,原理:

        脏检查:

          Session到底是如何进行脏检查的呢?当一个Customer对象被加入到Session缓存中时,Session会为Customer对象的值类型的属性复制一份快照。当Session清理缓存时,会先进行脏检查,即比较Customer对象的当前属性与它的快照,来判断Customer对象的属性是否发生了变化,如果发生了变化,就称这个对象是“脏对象”,Session会根据脏对象的最新属性来执行相关的SQL语句,从而同步更新数据库。

      4.当session执行close方法,session缓存的所有对象都被移除,它会先清理缓存,在执行sql语句 

      5.调用delete()删除游离对象时,当commit时执行sql的删除语句,对象对应的数据库数据没有了,此时对象是瞬时态

      6.需要同步到数据库的对象,要处于持久态

     图片来自:https://blog.csdn.net/fg2006/article/details/6436517?utm_source=copy

  • 相关阅读:
    网络运维架构
    Q in Q
    光纤/光模块的多模和单模
    Cisco VTP
    Cisco NTP配置
    惠普/aruba交换机
    【转】交换机背板带宽
    接入交换机下所有服务器不定时丢包
    windows 2012安装不了KB2919355
    Cisco交换机密码策略设置
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/12693913.html
Copyright © 2011-2022 走看看