1. 程式人生 > >hibernate session常用方法

hibernate session常用方法

 一.獲取物件  load()和get()方法的不同 1.獲取失敗處理方式不同

session.get()無法在資料庫中找到記錄的話,get()方法將會返回null,而load()方法將會丟擲找不到物件的異常。

2.返回型別不同

get()返回的是一個物件的例項,

效能上更加優異

而load()返回的是該物件的代理,這個代理是隻含有物件識別符號的空物件,只用真正用到該物件的內容時,hibernate才會想資料庫傳送select請求,獲取真實的物件。

注意 session物件關閉時 在試圖獲取真實物件時,會丟擲異常。。。。。

     二.儲存物件      1.persist方法無返回值,而save()方法將會返回物件的識別符號      2.persist只能儲存暫態物件和持久化對面,如果儲存了遊離態物件和移除態物件將會丟擲異常            三.更新物件      獲取了持久化物件或者遊離態物件時,我們往往可以用update()方法修改該物件的資料庫記錄      但是我們也可以不顯示呼叫update()方法,hibernate提供了智慧髒資料檢測可以進行髒資料檢測,      注意儲存了更新遊離態物件後,遊離態物件變成持久態物件      四.合併物件        merge(class)        合併物件主要是把遊離態物件合併到工作單元當中,然後把遊離態對的內容更新到資料庫對應的表格中。        合併的前提是首先在上下文中尋找識別符號相同的物件,如果沒有找到,則會向資料庫發出請求,使用遊離態物件的識別符號載入一個新的持久化物件        到上下文中,然後把遊離態物件的屬性賦值過去。        如果在上下文中找到識別符號相同的持久化物件,則會合並遊離態的內容到該持久化物件中        五.刪除物件      delete()      刪除暫態物件不做操作,刪除持久化物件和遊離態物件將會刪除資料庫記錄,刪除移除態物件將會丟擲異常      六.處理遊離態物件      1.生成遊離態物件:      session.close()隱式生遊離態物件      session.evict(Object)顯示的把某個實體物件清除持久化上下文,該物件成為遊離態物件      session.clear()清除上下文所有的持久化物件     2.利用遊離態物件複製物件     Session介面中提供了replicate方法來完成這項工作          Session session1=sf.openSession();     Transaction transaction1=session.beginTransaction();     Book book1=session.get(Book.class,1);     transaction1.commit();     session1.close();     此時得到了遊離態物件book1          Session session2=sf.openSession();     Transaction transaction2=session.beginTransaction();     session.replicate(book,ReplicateMode.OVERWRITER);     t2.commit();     session2.close();          EXCEPTION 存在識別符號相同的物件將會丟擲異常     IGNORE 存在識別符號相同的物件將會取消複製     OVERWRITER 存在識別符號相同的物件將會覆蓋該物件     LATEST_VERSION 複製過程中如果存在識別符號相同的物件,將會比較兩個物件版本號,遊離態版本大的物件將會被複制     不然複製過程將會被取消          3.重新繫結遊離態物件     1.update() 2.merge()     session.lock(book,LockMode.NODE)          七.輔助物件管理     Contains(Object)如果處於session上下文持久化範圍內,返回true     getIdentifier(Object)如果處於session上下文持久化範圍內,返回物件識別符號     refresh(Object)從資料庫中重新讀取該物件的狀態     refresh(Object,LockMode)從資料庫中重新讀取該物件的狀態並且使用給定的模式鎖定該物件          八.其他方法:     1.管理連線     connection()返回session相關聯的資料庫連線     isConnection()返回true     isOpen()     isDirty()是否含有變化的物件     close()     2.管理快取     setCacheMode(CacheMode)     NORMAL 從二級快取中讀取,並把物件寫入快取     IGNORE 除非希望設定物件無效,否者session不與二級快取進行交流     GET 從二級快取中讀取物件,不寫入,除非更新資料     PUT 寫入二級快取,但不讀取物件     REFRESGH 類似PUT 但是會強勢從資料庫更新物件狀態     預設為NORMAL    

。。