zoukankan      html  css  js  c++  java
  • 我对hibernate的对象的3种状态的理解

    老师的说法

    Hibernate中对象的状态
        在Hibernate使用中,对象的状态有以下三种
        a.临时对象 : 在程序中使用new方式创建的对象
        b.持久对象 : 在程序中与session对象关联,由session负责管理的对象.
                       处于session缓存中的对象都是持久对象
                       对象的持久性:指的是对象的数据状态在事务提交时可以与数据库保持同步更新.
                 session.flush();//将持久对象与数据库同步
                 tx.commit();//事务提交,提交前默认也调用session.flush()
        c.托管对象 : 在程序中如果session.close()后,session负责管理的持久对象将成为托管对象.
       垃圾回收器负责回收临时和托管状态,持久状态不能回收.

      1. 临时对象:数据库中不存在该对象且没有与session关联的对象,是代码new 出来的,此时该对象既无ID也是内存中独立的对象
      2. 持久对象:应该分2种情况:
         a. 数据库中不存在该对象,但已经与session关联,并且对象的id也已经存在了,即事务提交时可以与数据库保持同步
         b. 数据库已经存在的对象,类似被session.load出来,此时的对象也是被session管理的,更新和删除等操作,事务提交后当然可以与数据库同步
      3. 脱管对象:
         也有可能数据库中存在或者不存在,其实脱管就是:由session管理变为session不再管理,而交由JVM去管理(可能被回收)
        可能是:
               a. 数据库中存在了,被load出来update
               b. 临时对象已经与session关联,但事务没提交
                  ...
               等情况下,session关闭或清除缓存了。

    先自己理解一下,然后结合老师的说法,此刻总算可以较为清晰的理解hibernate的3种对象状态了。

  • 相关阅读:
    栈及其在.NET FrameWork中的源码分析
    《高性能网站建设指南》读书笔记
    九宫格数独问题
    队列及其在.NET FrameWork中的源码分析
    《web标准之道》读后感(书评)
    SharePoint中的权限体系
    关于异步方法调用
    WF4.0 Beta2:关于动态保存和装载XAML工作流
    Lotus Symphony介绍及试用
    Node.js 0.8.18 / 0.9.7 发布
  • 原文地址:https://www.cnblogs.com/jianglong-liang/p/3301175.html
Copyright © 2011-2022 走看看