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
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种状态之间的转换,我们可以直接看下面这图就明白了
作者:zeng1994
出处:http://www.cnblogs.com/zeng1994/
本文版权归作者和博客园共有,欢迎转载!但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接!