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

hibernate 常用方法介紹

一、hibetnateTemplate常用方法

1、delete(Object entity) 刪除指定的持久化例項
在程式中一般先用    Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大於0若
否則事務回滾。再用get(Class entityClass,Serializable id,LockMode lockMode)加鎖查詢出持久
化例項,一般用lockMode.update悲觀鎖,最後用delete(Object entity)來刪除此例項。

2、deleteAll(Collection entities) 刪除集合內全部持久化例項
entities必須為持久化例項,否則報資料庫異常錯誤。

3、find(String queryString) 根據HQL查詢字串來返回例項集合
find方法在執行時會先查詢快取,如果快取找不到再查詢資料庫,如果再找不到就會返回null。

4、get(Class entityClass,Serializable id)根據主鍵載入特定持久化例項
在程式中一般先用     Assert.isTrue斷言id是否大於0,若大於0繼續執行,若查到資料則返回例項,否則返回空
不同於load,load若有資料則返回例項,否則報出ObjectNotFoundEcception異常,相比來說get效率高些

5、save(Object entity) 儲存新的例項
在程式中一般先用    Assert.notNull斷言實體是否為空,在進行儲存。

6、saveOrUpdate(Object entity)根據例項的狀態選擇儲存或者是更新
此方法同時包含了save與update方法的功能,如果傳入的引數是臨時物件vo 沒有id,就呼叫save方法;如果傳
入的引數是遊離物件有id,就呼叫update()方法;如果傳入的引數是持久化物件po,就直接返回。

7、update(Object entity) 更新例項的狀態 例項必須為持久化狀態
在程式中一般先用    Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大於0,

然後在更新例項,entity必須含有id否則不能更新。

8、Object execute(hibetnateCallback action)是HibernateCallback介面類。 
當dao中的方法不能滿足程式需要時可以考慮用此方法。如:根據幾個不同引數需要返回唯一實體時用uniqueResult()返回。
HibernateCallback裡面定義了一個doInHibernate的方法,這個方法是可變的。如果要查詢資料方法應該就
是:session.load()。刪除資料就是session.delete().這樣的話查詢資料庫的方法用execute方法。

 
9、bulkUpdate()通過語句直接增加、更新、刪除實體 
一般有bulkUpdate(String sqlString) 和 bulkUpdate(String sqlString,Object[] object)兩個
方法,返回增加,更新,或者刪除的數量一般用於批量。
 
10、hibernate主鍵生成策略

(1)Assigned: 在插入資料的時候主鍵由使用者自己新增。如:<generator class="assigned"/>
(2)sequence: 呼叫資料庫的sequence來生成主鍵,要設定序列名,否則hibernate無法找到。
如:<param   name="sequence">ENTTY_NAME_SEQ</param>
(3)increment 插入資料的時候hibernate會給主鍵新增一個自增的主鍵,但是一個hibernate例項就維護一個計數器,
所以在多個例項執行的時候不能使用這個方法。

11、實體物件的三種狀態
Session的生命週期繫結在一個物理的事務(tansaction)上面。
Session的主要功能是提供對對映的實體類例項的建立,讀取和刪除操作
(1)自由狀態(transient): 不曾進行持久化,未與任何Session相關聯
(2)持久化狀態(persistent): 僅與一個Session相關聯
持久化例項可以通過呼叫 delete()變成遊離狀態。通過get()或load()方法得到的例項都是持久化狀態的
(3)遊離狀態(detached): 已經進行過持久化,但當前未與任何Session相關聯

遊離狀態的例項可以通過呼叫update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法進行持久化

參考連結:http://www.jb51.net/article/41541.htm