Hibernate学习--Session生命周期的不同状态

时间:2021-08-05 08:59:24

前言

总结一下Session的不同状态。

Session的生命周期不同状态

三种状态

Hibernate生命周期中java对象的三种状态:

1、临时状态(transient):用new语句创建,还没有被持久化,不处于Session的缓存中;
2、持久化状态(persistent):已使用save()或者saveOrUpdate()方法,处于Session的缓存中和数据库表中,生成了自己的Oid标识;
3、游离状态(detached):被持久化,已使用evict(Object),session.close()或者使用clear()清除缓存,不再处于Session的缓存中或不存在数据库表中,但是依然是存在自己的OId标识。

三种状态的转化图解

Hibernate学习--Session生命周期的不同状态

代码设计

1.创建session,开始事务

@Before
public void init() {
System.out.println("start!");
// 创建配置对象
Configuration config = new Configuration().configure();
// 建立SessionFactory
SessionFactory factory = config.buildSessionFactory();
// 顺序1--开启会话
session = factory.openSession();
// 顺序2--开启事务
session.beginTransaction();

}

2.save( )

@Test
public void testSavePerson2() {
// 生成person对象
Person person = new Person(14, "gaohan", "222", "girl", "qq.com");
// 保存对象
session.save(person);
session.update(person);
}

3.提交事务,关闭session

@After
public void destory() {
System.out.println("end!");
// 顺序3--(关闭)提交事务
session.getTransaction().commit();
// 顺序4--关闭会话
session.close();

}

Session持久化过程

图解

Hibernate学习--Session生命周期的不同状态

参考资料

http://www.cnblogs.com/wangkai1990/p/5704529.html