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
。。