hibernate 對象的4種狀態

下面簡單的介紹一下4種狀態

臨時狀態(新建狀態):剛用new語句創建,還沒被實例化,並且不處於session的緩存中,處於臨時狀態的java對象被稱爲臨時對象.

持久化狀態:被加入到數據庫中,也被加入到session緩存中,處於持久化的java對象被稱爲持久化對象.

遊離狀態:已經被持久化,但是不存在session緩存中,處於遊離的java對象被稱爲遊離對象.

刪除狀態:不處於數據庫,更不處於session緩存中.

以下舉例說明:

package com.zking.action;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.zking.entity.Mytest;

public class TestAction {

	    private Configuration con=null;
	    private SessionFactory sf=null;
	    private Session session=null;
	    private Transaction ta=null;
		
		
		@Before
		public void before() {
			//加載classpath下的hibernate.cfg.xml文件
			con=new Configuration().configure();
			//連接會話的工廠
			sf=con.buildSessionFactory();
			//創建session
			session=sf.openSession();
			//開啓事務進行提交
			ta=session.beginTransaction();
			
		}
		
		
		
		@After
		public void after() {
			//關閉事務
			ta.commit();
			//關閉session
			session.close();
			//關閉工廠
			sf.close(); 
		}
		
		
		//改變session對象狀態  無-臨時-持久
		@Test
		public void newToLong() {
			Mytest t=new Mytest();
			t.setTid("23456789");
			t.setTname("優秀人");
			//不需要管主鍵的生成策略  不要認證
			session.save(t);
			//要管主鍵的生成策略  要認證 不然會報錯
			//session.persist(t);
			 
			//從持久到遊離 LongToFree
//			關閉之後-回收
//			session.close();
//			清空session對象 保留session  
//			session.evict(t);
//			重置session對象 保留session  
//			session.clear();
			
			//從遊離到刪除 FreeToDelete
//			session.delete(t);
		}
	 
		 
		
		
		//clear  從無到持久到遊離 在到持久 在到刪除
		@Test
		public void clear() {
			//實例化對象
			Mytest t=new Mytest();
			t.setTname("addzq");
			//保存增加的對象 持久
			session.save(t);
			//持久到遊離 用clear 重置 清空session對象
			session.clear();
			//清空之後還可以改變狀態  從遊離到持久
			Mytest m=new Mytest();
			m.setTid("001");
			m.setTname("拜拜拜");
			session.saveOrUpdate(m);
			//從持久到刪除
			session.delete(t);
			 
		}
		
		
		//懶加載  lazy="false"
		@Test
		public void load() {
			Mytest mt=session.load(Mytest.class, "001"); 
			System.out.println(mt);
			session.close();
			System.out.println(session);
			
		}
	 
}

簡單的說四種狀態的進行就是一個簡單crud的實現過程裏面session對象狀態的改變(慢慢去琢磨,這是我理解的,如果是不太清楚的話,請諒解哈)
口語化舉例一下:登錄之前還沒有對象->登錄後有了user對象(用session user對象)->(賦予session對user管理權)session對象可以進行增刪改查的操作 
1.增加就是從臨時到持久
2.要想編輯一下session保存的對象(就要先清掉之前session裏存的對象) 必須給session一個指示才能進行增加或修改操作 evict/clear(session不能關閉)  
3.然後改變對象就是從遊離到持久 update/saveOrUpdate
4.刪除狀態就是:你增加的對象在數據庫可以進行刪除吧? 修改過的對象也可以進行刪除吧? 所以持久和遊離狀態都可以進行刪除 刪除之後就進行回收
現在的話數據庫表和session裏面都沒有這個對象了

附上總結圖一張

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章