天天看點

【架構】[Hibernate]構架知識點常見操作Hibernate常見操作Hibernate主鍵ID生成方式Hibernate 查詢方式

配置檔案、JavaBean、HibernateSessionFactory等代碼,請看上一篇:

<a href="http://blog.csdn.net/qq_26525215/article/details/52337326">【架構】[Hibernate]構架知識點詳解入門與測試執行個體</a>

如果利用Hibernate修改資料庫時,需要使用事務處理,一個事務送出時才真正将修改過的記錄更新到資料庫中。

根據映射檔案,Hibernate會把我們的增加對象的語句轉換為對應的SQL語句。

根據映射檔案,Hibernate會把我們的删除對象的語句轉換為對應的SQL語句。

隻修改還可以用:Update

hibernate提供了saveOrUpdate的方法來進行資料庫的操作。

hibernate會根據對象的狀态決定是insert還是update,

其根本是通過xml檔案中unsaved-value來确定的。

如果設定null,系統會根據傳入的對象的id的值判斷,

如果是null,則表示對象不存在,那麼insert;

如果不是null,則表示已經存在,那麼update.

資料庫中表有主鍵、主鍵的唯一性決定了資料庫表中記錄唯一。緩存在Session中的資料即執行個體都有一個唯一的ID,ID映射了資料庫中主鍵。

主鍵由外部程式負責生成,無需Hibernate參與。即當增加一個實體時,由程式設定它的ID值(手工配置設定值)

在DB2、SQL Server、MySQL等資料庫産品中表中主鍵列可以設定是自動增長列,則增加一條記錄時主鍵的值可以不指派。用資料庫提供的主鍵生成機制。

主鍵按數值順序遞增。

此方式的實作機制為在目前應用執行個體中維持一個變量,以儲存着目前的最大值,之後每次需要生成主鍵的時候将此值加1作為主鍵。

這種方式可能産生的問題是:如果目前有多個執行個體通路同一個資料庫,那麼由于各個執行個體各自維護主鍵狀态,不同執行個體可能生成同樣的主鍵,進而造成主鍵重複異常。

是以,如果同一資料庫有多個執行個體通路,此方式必須避免使用。

采用資料庫提供的sequence 機制生成主鍵。

如Oralce 中的Sequence,在Oracle中建立序列:

create sequence hibernate_sequence;

當需要儲存執行個體時,Hibernate自動查詢Oracle中序列”hibernate_sequence”的下一個值;該值作為主鍵值。可以改變預設的序列名稱。

由Hibernate根據底層資料庫自行判斷采用identity、hilo、sequence其中一種作為主鍵生成方式。

由Hibernate為ID列指派,依據目前用戶端機器的IP、JVM啟動時間、目前時間、一個計數器生成串,以該串為ID值。

Hibernate配備了一種非常強大的查詢語言,這種語言看上去很像SQL。但是不要被文法結構上的相似所迷惑,HQL(Hibernate query lauguage) 被設計為完全面向對象的查詢。

查詢名字中帶有’1’的所有Student

還是傳回一個集合,隻不過集合中存儲的不是表的執行個體而是對象。

查詢多個屬性,其集合元素是對象數組

數組元素的類型,跟實體類的屬性的類型相關

如” from Customer cus where cus.name=?”;

如” from Customer cus where cus.name=:name”;