• sgg_6_持久化对象的状态


    一、持久化对象的状态
      站在持久化的角度,Hibernate把对象分为4种状态
      1.临时状态  

        在使用代理主键的情况下,OID通常为null
        不处于Session的缓存中
        在数据库中没有对应的记录
        这就好比公司的一个零时工,不受公司规章制度的监管(几点上班,几点下班),公司员工库里面也没有该员工的信息。

      2.游离状态    

        OID不为null
        不再处于Session缓存中
        一般情况需下,游离对象是由持久化对象转变过来的,因此在数据库中可能还存在与它对应的记录。
        这就好比一个请假员工

      3.持久状态  

        OID不为null
        位于Session缓存中
        若在数据库中已经有和其对应的记录,持久化对象和数据库中的相关记录对应
        Session在flush缓存时,会根据持久化对象的属性变化,来同步更新数据库
        在同一个Session实例的缓存中,数据库表中的每条记录只对应唯一的持久化对象
        这就好比公司的一个正式员工,有员工号,并且属于公司的监管下。

      4.删除状态

        在数据库中没有和其对应的OID记录(曾今有)
        不再处于Session缓存中
        一般情况下,应用程序不该再使用被删除的对象
        这就好比一个被公司开除了的员工。
      Session的特定方法能使对象从一个状态转换到另一个状态。

    二、对象的状态转换图

    三、session的get()和load()方法

      get():立即检索,当检索OID不存在的对象时会返回null。

      load():延迟检索,当检索OID不存在的对象时会会返回ObjectNotFoundException(因为这是通过javassist要生成代理对象)

      load()方法可能会抛出LazyInitializationException异常:在需要初始化代理对象之前已经关闭了session 

    如有任何疑问可联系邮箱: 给我发邮件、或直接联系QQ:1584875179 || 点返回首页

  • 相关阅读:
    centos x86_64--------------------------------系统调用
    通过tracing技术来教授操作系统
    Cobra —— 可视化Python虚拟机 and 图解python
    ArcGIS Engine中空间参照(地理坐标)相关方法总结
    ArcGIS Engine检索要素集、要素类和要素
    C#打开SDE数据库的几种方式总结
    ArcSDE:C#创建SDE要素数据集
    ORA-01653 无法在表空间扩展的解决办法 -- 增加表空间大小或给表空间增加数据文件
    3.第一个Node.js程序:Hello World!
    2.使用的版本
  • 原文地址:https://www.cnblogs.com/aeon/p/10836370.html
Copyright © 2020-2023  润新知