`

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);
        }
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics