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种对象状态了。

  • 相关阅读:
    c# 把对象加入队列,对象为全局变量,对象改变队列值也跟着改变
    C# 一个数组未赋值引发的错误
    c# 2016QQ自动登录程序
    当时钟事件声明为过程变量 让system.threading.timer时钟失效
    if 循环的深入理解 哈希表的一种应用
    VB6对象与地址相互转换
    VB6的函数指针传递
    .net framework 4.0 从 GAC 卸载 程序集
    .net framework 4.0 从 GAC 卸载 程序集
    GAC in CLR 3.0
  • 原文地址:https://www.cnblogs.com/jianglong-liang/p/3301175.html
Copyright © 2011-2022 走看看