熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

淺談在Hibernate中使用Oraclesequence

2013-11-13 15:45:16  來源: Oracle 

   為表創建自增長自段有兩種一種是不同的表使用各自的Sequence方法如下

  在Oracle sequence首先創建sequence

  

  create sequence seq_id
minvalue
start with
increment by
cache ;

  在你的hbmxml中的配置

  

  
<id column=ID name=id type=integer>
<generator class=sequence>
<param name=sequence>seq_id</param>
</generator>
</id>

  這樣再插入數據的時候Hibernate會自動生成如下語句

  

  
hibernate: select seq_idnextval from dual
hibernate: insert into YXJKT_YXJK_WHRYTXL (XM ZW LXDH SJHM DZYJ  
IP     ID) values (? ? ? ? ? ? ?)

  自動生成下一個序列值然後將對象插入表中在使用的時候需要注意Hibernate對於sequence的主鍵的要求是一定要是shorlong或者integer

  二 還有一種方式是使用公共的sequence

  這各時候可以不指定表使用的sequence那麼相應的hbmxml中內容是

  

  <id column=ID name=id type=integer>
<generator class=native>   
</generator>
</id>

  然後創建公用的 sequence對象命名為 hibernate_sequence

  

  create sequence hibernate_sequence
minvalue
maxvalue
start with
increment by ;

  三 注意事項

  如果數據庫是從sqlserver等其他數據庫移植而來的那麼創建sequence時的起始值應該比當前表中最大的ID值大否則會出現錯誤因為sequence 不會維護是否和導庫前現有的值重復

  sequence用於Oracle數據庫

  

  <id name=id column=id>
<generator class=sequence>
<param name=sequence>序列名</param>
</generator>
</id>

  native跨數據庫時使用由底層方言產生

  Defaultsequence為hibernate_sequence
<id name=id column=id>
<generator class=native/>
</id>

  注使用native時Hibernate默認會去查找Oracle中的hibernate_sequence序列如果Oracle中沒有該序列連Oracle數據庫時會報錯


From:http://tw.wingwit.com/Article/program/Oracle/201311/17252.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.