Hibernate学习:Transient、Persistent、Detached三个状态
Transient、Persistent、Detached是Hibernate三个核心的状态:
---------------------------------------------------------------------------
Transient状态最大的特征是:
* 没有id
* 内存中有对象,数据库中没有,session缓存中没有
* 没有纳入session的管理
Persistent状态最大的特征是:
* 存在id
* 在数据库中有与之匹配的数据
* 纳入了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);
}
}
}