主鍵生成策略 Hibernate入門學習

2021-08-26 08:19:51 字數 1779 閱讀 7508

敘:在之前的hibernate框架搭建入門中需要配置對映檔案和核心配置檔案,而在實體類的對映檔案配置中有乙個配置項是主鍵生成策略,當時並沒有深入地學習,只是知道常用的有「native」的生成策略,那麼,電蟲今天將會對主鍵生成策略的幾個策略屬性進行詳細學習和記錄。

學習主鍵生成策略首先要明白什麼是主鍵生成策略、它能夠幹什麼等等,其次才是學習它由哪些種類及相應資訊、如何使用它等,記得某位***家曾說過,帶著疑問去學習,帶著目的去學習(pass:我也不知道是誰說的~~~),因此,我們先就主鍵生成策略這個概念進行了解,然後再進行理論性的、深層次的學習;

所謂的主鍵生成策略,就是hibernate提供了多種生成主鍵值的方法,因為,在平時開發中主鍵的設定不允許由使用者來操作,一般交由資料庫,手動編寫程式設定,在hibernate框架中為了減少編寫設定主鍵的**量,所以出現了幾種適用於各種情況下的主鍵生成策略;

因此,我們從上面了解到主鍵生成策略的一些資訊歸納為:

那麼,接下來就是學習主鍵生成策略的種類及相應資訊和使用方法了;

既然是配置好的功能能直接使用就說明需要有一定的侷限性,即:每種策略對應一種情況;總結為七種策略,下面詳細的進行學習;

序號策略名

介紹備註

1incerment

hibernate中提供的一種自動增長機制,適用於short、int、long等型別的主鍵。只能在單執行緒中使用;

執行機制:首先傳送一條語句:select max(id) from table_name;獲得現存資料的最大id值,然後讓id+1作為下一條存進來的資料的id;

2indentity

適用於short、int、long等型別的主鍵,使用的是資料庫底層的自動增長機制

mysql、mssql均具有自動增長機制,oracle不具有,因此只是用於對mysql、mssql資料庫操作

3sequence

適用於short、int、long等型別的主鍵,採用的是序列機制

oracle具有序列機制,mysql沒有,因此只適用於oracle資料庫的操作

4uuid

適用於字串型別的主鍵,使用hibernate框架中的隨機方式生成字串型別的主鍵;

uuid的標準型式包含32個16進製制數字,以連字型大小分為五段,形式為8-4-4-4-12的32個字元。示例:550e8400-e29b-41d4-a716-446655440000

5native

本地主鍵生成策略,可以在identity和sequence兩種策略方式中自動切換;

最常用的一種生成策略

6assigned

使用此策略後意為hibernate放棄對外鍵的管理權

使用此策略後需要使用者自己手動編寫程式或設定主鍵的資訊;

7foreigen

一對一的一種關聯對映情況下使用的(了解即可)

限制性比較大,一般不使用

總結:主鍵是short、int、long型別的時候可以使用native,若主鍵是字串型別的則使用uuid型別策略,特殊情況特殊考慮;

學習完主鍵生成的各種策略後就可以學習其使用方法了,下面的**就是在對映檔案中寫入這個實體類對映的資料庫表的主鍵生成策略(比較拗口,但是多讀幾遍會恍然大悟~~~);

name="cust_id"  >

class="native">

generator>

id>

解釋:

從這個**片段中得知:

使用很方便簡單,畢竟這個主鍵生成策略的目的就是減少程式設計師編寫主鍵配置資訊的**,所以越簡單當然約好啦!

Hibernate主鍵生成策略

hibernate主鍵生成策略 1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援...

Hibernate主鍵生成策略

1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定sequence...

hibernate主鍵生成策略

文章摘抄至 1 自動增長identity 適用於mysql db2 ms sql server,採用資料庫生成的主鍵,用於為long short int型別生成唯一標識 使用sql server 和 mysql 的自增欄位,這個方法不能放到 oracle 中,oracle 不支援自增字段,要設定se...