Transient、Persistent、Detached是Hibernate三个核心的状态:
---------------------------------------------------------------------------
Transient状态最大的特征是:
* 在数据库中没有与之匹配的数据
* 没有纳入session的管理
Persistent状态最大的特征是:
* 在数据库中有与之匹配的数据
* 纳入了session的管理
* 在清理缓存(脏数据检查)的时候,会和数据库同步
Detached状态最大的特征是:
* 在数据库中有与之匹配的数据
* 没有纳入session的管理
---------------------------------------------------------------------------
如下面的两个图(中英文对照)
![]()
package com.ahuzl.hibernate; import java.util.Date; import org.hibernate.Session; import org.hibernate.Transaction; import junit.framework.TestCase; public class SessionTest extends TestCase { public void testSession(){ Session session = null; Transaction tx = null; User user = null; try { session = HibernateUtils.getSession(); tx = session.beginTransaction(); //Transient状态,临时状态,一经save就会转变到Persistent状态 user = new User(); user.setName("中田"); user.setPassword("nakada"); user.setCreateTime(new Date()); user.setExpireTime(new Date()); //Persistent状态,持久化状态(数据库中有相同的值与之对应),当属性发生改变时,hibernate会自动与数据库同步,不需要update session.save(user); user.setName("幸島"); tx.commit(); }catch (Exception e){ e.printStackTrace(); tx.rollback(); }finally { HibernateUtils.closeSession(session); } //Detached状态,游离状态,session关闭之后,便由persistent状态变为Detached状态 try{ session = HibernateUtils.getSession(); session.beginTransaction(); user.setName("幸島"); //在Detached状态下,更新对象的属性,需要update才能反映到数据库 session.update(user); session.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); session.getTransaction().rollback(); }finally{ HibernateUtils.closeSession(session); } } } |
以下是一段用于说明这三个状态的代码: