Hiberante持久化对象的3种状态

Posted zeng1994

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hiberante持久化对象的3种状态相关的知识,希望对你有一定的参考价值。

    近日一同事问我关于Hibernate中对象的3种状态的问题,因此特意总结一下。在Hibernate中对象是有以下3中状态:
      • 瞬时态(transient object)没有OID值,没有被session对象管理
      • 持久态(persistent object):有OID值,被session对象管理了
      • 脱管态(detached object):有OID值,没有被session管理

      上面说的这个OID其实是指主键属性,可以简单的理解为id(一般我们的主键都是id)。下面通过代码来介绍下这3中状态:
public class Demo2 {
  
@Test
public void test1(){
    Session session = HibernateUtil.getSession();
    session.beginTransaction();
    //s:没有IOD,没有被session管理
    //1,这个s对象就是瞬时态对象
    Student s =new Student();
    s.setName("美美");
    //save()方法返回OID的值
    Serializable id = session.save(s);
    //当前s被session的save执行后
    //s: 有OID,已经被session管理了
    //2,这个s对象就是持久态对象
    System.out.println(id);
    System.out.println(s.getId());  //持久态对象有id的
    session.getTransaction().commit();
    session.close();//session关闭了
    //s: 有OID,没有被session对象
    //3.这个s对象就是脱管态对象
    System.out.println(s.getId());
    }
}

     关于这3种状态之间的转换,我们可以直接看下面这图就明白了
 

以上是关于Hiberante持久化对象的3种状态的主要内容,如果未能解决你的问题,请参考以下文章

Hibernate Session 4种对象状态

Hibernate Session 4种对象状态

hibernate中实体类对象的四种状态

Hibernate 几种对象状态

脏检查和快照的故事

hibernate进阶hibernate持久化对象的三种状态