歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Hibernate中使用<generator>設置主鍵生成方式最通用、最高效的方法

Hibernate中使用<generator>設置主鍵生成方式最通用、最高效的方法是什麼呢?

答案是uuid.hex算法!

  1. <id name="id" type="long" column="ID">  
  2.         <generator class="uuid.hex"/>  
  3. </id>  

由於Hibernate基於128位唯一值產生算法UUID生成16進制數值(編碼後為長度32的字符串表示)作為主鍵。

UUID包含:IP地址,JVM啟動時間(精確到1/4秒),系統時間和一個計數器值(在JVM中唯一)。在Java代碼中不可能獲得MAC地址或者內存地址,所以這已經是我們在不使用JNI的前提下能做的最好實現了!

由於常用的數據庫,如Oracle、DB2、SQLServer、MySQL等都提供了易用的主鍵生成機制(Auto-Increase字段或者Sequence)。我們可以在數據庫提供的主鍵生成機制上,采用native的主鍵生成方式。

不過值得注意的是,一些數據庫提供的主鍵生成機制在效率上未必最佳,大量並發insert數據時可能會引起表之間的互鎖。數據庫提供的主鍵生成機制,往往是通過在一個內部表中保存當前主鍵狀態(如對於自增型主鍵而言,此內部表中就維護著當前的最大值和遞增量),接著每次插入數據會讀取這個最大值,然後加上遞增量作為新紀錄的主鍵,之後再把這個新的最大值更新回內部表中。這樣,一次Insert操作可能導致數據庫內部多次表讀寫操作,同時伴隨的還有數據的加鎖解鎖操作,這對性能產生了較大影響。因此,對於並發Insert要求較高的系統,推薦采用uuid.hex作為主鍵生成機制。

Copyright © Linux教程網 All Rights Reserved