纯css打造立体时钟
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
By_jie

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 

 

posted @ 2019-05-09 08:20  1024军团  阅读(178)  评论(0编辑  收藏  举报