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。
<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"/>