瘋狂

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

          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>
          發(fā)現(xiàn)生成的id很有規(guī)律,一看源碼原來hibernate的guid底層使用采用數(shù)據(jù)庫底層的guid算法機制,對應MYSQL的uuid()函數(shù),SQL

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


          具體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;


          結(jié)果:
          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 臭豆腐
          真心 不錯
          主站蜘蛛池模板: 营山县| 林周县| 崇信县| 广汉市| 蕲春县| 永修县| 马边| 新干县| 瓮安县| 乌鲁木齐县| 平度市| 宁阳县| 临桂县| 渝中区| 桃园市| 宁河县| 汽车| 疏附县| 晋宁县| 桑植县| 绍兴县| 宁晋县| 西安市| 凤凰县| 将乐县| 班玛县| 延津县| 泰兴市| 南华县| 四平市| 惠州市| 温宿县| 通州市| 阳山县| 温泉县| 柳林县| 镇江市| 青田县| 镇沅| 武川县| 马鞍山市|