天天看點

hibernate中主鍵生成機制hi/lo算法說明

hilo(高低位方式high low)是hibernate中最常用的一種生成方式,需要一張額外的表儲存hi的值。儲存hi值的表至少有一條記錄(隻與第一條記錄有關),否則會出現錯誤。

<id name="id" column="id">

<generator class="hilo">

<param name="table">hibernate_hilo</param>

<param name="column">next_hi</param>

<param name="max_lo">100</param>

</generator>

</id>
           

hilo生成器生成主鍵的過程(以hibernate_unique_key表,next_hi列為例):

1. 獲得hi值:讀取并記錄資料庫的hibernate_unique_key表中next_hi字段的值,資料庫中此字段值加1儲存。

2. 獲得lo值:從0到max_lo循環取值,內插補點為1,當值為max_lo值時,重新擷取hi值,然後lo值繼續從0到max_lo循環。

3. 取得hi和lo值後,根據公式 hi * (max_lo + 1) + lo計算生成主鍵值。

當hi值是0的時候,那麼第一個值不是0*(max_lo+1)+0=0,而是lo跳過0從1開始,直接是1、2、3……

引用文章:

http://www.iteye.com/topic/472106

http://www.cnblogs.com/kakafra/archive/2012/09/16/2687569.html

繼續閱讀