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());     } }
 

1

public class Demo2 {

2

  

3

@Test

4

public void test1(){

5

    Session session = HibernateUtil.getSession();

6

    session.beginTransaction();

7

    //s:没有IOD,没有被session管理

8

    //1,这个s对象就是瞬时态对象

9

    Student s =new Student();

10

    s.setName("美美");

11

    //save()方法返回OID的值

12

    Serializable id = session.save(s);

13

    //当前s被session的save执行后

14

    //s: 有OID,已经被session管理了

15

    //2,这个s对象就是持久态对象

16

    System.out.println(id);

17

    System.out.println(s.getId());  //持久态对象有id的

18

    session.getTransaction().commit();

19

    session.close();//session关闭了

20

    //s: 有OID,没有被session对象

21

    //3.这个s对象就是脱管态对象

22

    System.out.println(s.getId());

23

    }

24

}

     关于这3种状态之间的转换,我们可以直接看下面这图就明白了
Hiberante持久化对象的3种状态详解编程语言
 

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/15512.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论