zoukankan      html  css  js  c++  java
  • Hibernate(六)__对象的三种状态

    瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

    持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;

              持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

     (当对象save后,会将数据持久化,这时obj.set()后再提交事务hibernate会检测到数据的修改。

    而如果在save这个对象之前(即使是处在事务中),也即是还没有持久化这个对象之前,用obj.set()则hibernate不能检测到数据修改,不会影响数据库)

    脱管/游离(detached):数据库中有数据与之对应,但当前没有session与之关联;脱管对象状态发生改变,hibernate不能检测到。

    hibernate对象的三种状态,转换图:

    Commit()会关闭session

    面试图:如果判断一个对象处于怎样的状态?

    主要的依据: 1. 看该对象是否处于session, 2, 看在数据库中有没有对应的记录

    总结:

    瞬时态: 没有session管理,同时数据库没有对应记录

    持久态: session管理,同时在数据库中有记录

    脱管态/游离态: 没有session管理,但是在数据库中有记录.

  • 相关阅读:
    css+ul+li方式 横向再纵向排列
    b表中有的塞给a表
    .net remoting的两种实现方式 cow
    Prism之Module cow
    2012项目总结 cow
    WCF学习笔记 cow
    也谈委托,事件和回调 cow
    理清apply(),call()的区别和关系 cow
    CLR via C#学习之线程栈,托管堆,值类型和引用类型 cow
    细说系列笔记 cow
  • 原文地址:https://www.cnblogs.com/xiangkejin/p/6000618.html
Copyright © 2011-2022 走看看