Hibernate對象狀態

Hibernate對象狀態:

臨時(transeint):一般爲new出的對象,與數據庫沒有對應,跟session沒有關聯

持久化(persist):對象在session管理之中,與數據庫對應

特點:有唯一標識符(OID)

                                   對象的改變同步到數據庫

遊離(detached):數據庫中有對應記錄,但對象不再session管理中,修改此狀態對象數據庫不會有變化

刪除(removed):執行了delete()後的對象

狀態間的轉換關係:


session中的方法:

一、操作實體對象的

save() 將臨時狀態變成持久化狀態 insert into...

update()將遊離狀態變成持久化狀態 update...

delete() 將持久化或遊離狀態變成刪除狀態 delete... 如果刪除的對象不存在,會拋出異常

二、查詢實體對象的

get() 獲取數據,持久化狀態 select... 會馬上執行sql語句,如果對象不存在,拋出空指針異常

返回的原始對象

load() 獲取數據,持久化狀態 select... 不會馬上執行sql語句

返回的是代理對象,要求類不能是final,否則不能生成子類代理,就不能使用懶加載

讓懶加載失效的兩種方法:1.類由final修飾,2.在映射文件的class標籤中設置lazy="false",lazy默認爲true

createQuery()

createCriteria()

三、操作緩存的

clear()

evict()

flush()


session大批量保存

@Test
	public void testBatchSave(){
		Session session=sessionFactory.openSession();
		Transaction tx=session.beginTransaction();
		
		//操作
		//操作大量數據,防止session中對象過多而發生內存溢出
		
		for(int i=0;i<30;i++){
			User user =new User();
			user.setName(i+"test");
			session.save(user);
			
			if(i%5==0){
				session.flush();//先刷新
				session.clear(); //再清空
				
			}
		}
		tx.commit();
		session.close();
	}


發佈了238 篇原創文章 · 獲贊 20 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章