hibernate 主鍵 生成策略詳解

increment,  ==> select max(id) from 表名

  

它對應:org.hibernate.id.IncrementGenerator  類

配置: 

<generator class="increment" />

 


 

sequence [*],  ==> select sequence_name.nextval from dual;

它對應: org.hibernate.id.SequenceGenerator

 

配置: 

<generator class="sequence">

<param name="sequence">sequence_name</param>

</generator>

注:如果此處不使用<param>子元素來指定序列名,那麼會有一個

默認的序列名: hibernate_sequence

 


 

 

hilo [*],  高位來自於一個單行單列的表;

它對應: org.hibernate.id.TableHiLoGenerator

配置: 

<generator class="hilo">

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

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

<param name="max_lo">最大低位值</param>

</generator>

 


 

seqhilo,  高位來自於一個序列;

它對應:  org.hibernate.id.SequenceHiLoGenerator

配置:

<generator class="seqhilo">

<param name="sequence">sequence_name</param>

<param name="max_lo">最大低位值</param>

</generator>

 


 

uuid.hex [*],    全宇宙唯一的32位的字符串

配置:

<generator class="uuid.hex" />

 


 

assigned,   手動分配主鍵

配置:

<generator class="assigned"/> 

 


 

identity,  

配置:

<generator class="identity"/> 

 


----與increment的區別

identity:由底層數據庫生成標識符。identity是由數據庫自己生成的,但這個主鍵必須設置爲自增長,前提條件是低層數據庫支持自動增長字段類型  

   increment:由hibernate管理主鍵,自動以遞增的方式生成標識符,每次增量爲1。其在每次插入前取得一個當前最大的id+1作爲主鍵,該主鍵必須爲Integer類型

 

foreign  [*]  外鍵;

配置:

<generator class="foreign">  

<param name="property">屬性</param>

<generator>

 

select:  爲了之前的遺留系統面保留下來的;

 

native:  爲了跨平臺開發而選用的一種主鍵生成策略;

它會根據不同的數據庫平臺而從以下幾個策略中進行選取:

identity,  sequence,       hilos

DB2    ORALCE      MYSQL

配置:

<generator class="native" />  

-----Hibernate中的主鍵生成方法native與assigned

在用Hibernate的時候,當有表中的主鍵是庫自動生成的時候將使用native。
<generator class="native"></generator>
而當是自己添加的時候則需要改爲assigned。
<generator class="assigned"></generator>
否則將會出現異常!

 

 

----foreign配置

級聯保存

    1、一對多級聯保存:在<many-to-one>和<set>都加上cascade="save-update"
    2、一對一級聯保存則在<one-to-one>配置上加上cascade="save-update"


   被設爲外鍵方:
   <generator class="foreign">
         <param name="property">users</param>
   </generator>
   <one-to-one name="users" class="com.zjhk.shop.vo.Users" constrained="true" cascade="save-update" />
  
   主鍵方:
   <one-to-one name="shoppingCarts" class="com.zjhk.shop.vo.ShoppingCart" cascade="save-update"/>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章