瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          hibernate自定義主鍵策略

          Posted on 2011-05-16 17:09 瘋狂 閱讀(4070) 評論(1)  編輯  收藏 所屬分類: hibernate

          hibernate自定義主鍵策略,
          最近項目中使用hibernate的guid生成策略,配置如下:
          <id name="id" type="java.lang.String">
                      <column name="ID" length="32" />
                      <generator class="guid" />
          </id>
          發現生成的id很有規律,一看源碼原來hibernate的guid底層使用采用數據庫底層的guid算法機制,對應MYSQL的uuid()函數,SQL

          Server的newid()函數,ORACLE的rawtohex(sys_guid())函數等。


          具體oracle使用的是(select rawtohex(sys_guid()) from dual)
          使用下面的pl/sql測試:

          declare 
            v varchar2(
          32);
          begin
            
          for i in 0..10 loop
            select   rawtohex(sys_guid()) into v from dual;
              dbms_output.put_line(v);
            end loop;
          end;


          結果:
          A36190EE69DDAAE7E040200A8A096CE5
          A36190EE69DEAAE7E040200A8A096CE5
          A36190EE69DFAAE7E040200A8A096CE5
          A36190EE69E0AAE7E040200A8A096CE5
          A36190EE69E1AAE7E040200A8A096CE5
          A36190EE69E2AAE7E040200A8A096CE5
          A36190EE69E3AAE7E040200A8A096CE5
          A36190EE69E4AAE7E040200A8A096CE5
          A36190EE69E5AAE7E040200A8A096CE5
          A36190EE69E6AAE7E040200A8A096CE5
          A36190EE69E7AAE7E040200A8A096CE5
          只有中間一個字符不同。

          下面采用hibernate自定id策略接口IdentifierGenerator
          我們簡單起見使用jdk自帶的uuid方法:

          public class UUIDGenerator implements IdentifierGenerator{

           
          private static Logger logger = Logger.getLogger(UUIDGenerator.class);
           
           
          public Serializable generate(SessionImplementor session, Object object)
             
          throws HibernateException {
            String id 
          = UUID.randomUUID().toString().replaceAll("-""").toUpperCase();
            
            
          return id;
           }


          }


          然后在配置的時候用如下配置即可:

          <id name="id" type="java.lang.String">
                      <column name="ID" length="32" />
                      <generator class="com.XXX.XXX.UUIDGenerator" />
          </id>
          ~完~


          評論

          # re: hibernate自定義主鍵策略  回復  更多評論   

          2013-04-19 10:30 by 臭豆腐
          真心 不錯
          主站蜘蛛池模板: 团风县| 孝感市| 汾西县| 渑池县| 长阳| 濮阳市| 阳东县| 沭阳县| 旬邑县| 西华县| 汝南县| 醴陵市| 随州市| 大田县| 临沂市| 平阴县| 南乐县| 容城县| 那坡县| 红安县| 台中县| 华亭县| 含山县| 景宁| 平度市| 沂水县| 乃东县| 长岭县| 潼南县| 体育| 金堂县| 安塞县| 永春县| 湄潭县| 应用必备| 莱州市| 衡东县| 汕头市| 胶南市| 青田县| 慈利县|