hibernate:主鍵生成策略
阿新 • • 發佈:2018-12-16
1.assigned
程式設計師自己控制:不受資料庫的影響(sid自增長也沒用,得程式設計師自己定義)
<generator class="assigned"></generator>
資料型別不限、儲存前必須賦值
2.identity(sql資料庫)
資料庫控制: (sql資料庫)identity(標識列/自動增長) 資料庫控制:受資料庫影響 sid自增長 , sid的資料型別必須為數字 ,無需賦值
3.sequence(oracle資料庫)
資料庫控制:sequence(oracle資料庫) 資料庫控制:受資料庫影響 sid自增長 , sid的資料型別必須為數字 ,無需賦值 預設使hibernate_sequence這個序列, 也可以通過sequence/sequence_name引數賦值
4.hibernate控制:increment uuid/uuid.hex
increment : 由hibernate自動遞增的方式生成識別符號,每次增量為1,優點是適用於所有資料庫,缺點是在叢集環境下可能會出現相同的主鍵值且OID必須為數值型別 uuid/uuid.hex (是由容器自動生成的一個32位的字串,.hex代表的是十六進位制) 32位的字串,無需賦值 OID是String型別而不能是數值型別
5.其它:native
等於identity+sequence 由Hibernate根據底層資料庫自行判斷採用identity,sequence其中一種作為主鍵生成方式。
6.建立主鍵生成器類
實現org.hibernate.id.IdentifierGenerator介面即可,並還可以實現org.hibernate.id.Configurable介面來讀取一些配置資訊
public class MyIdCreate implements IdentifierGenerator{ public Serializable generate(SharedSessionContractImplementor session, Object object) throws HibernateException { //公司名_模組名_時間戳 return "zking_order_"+new SimpleDateFormat("YY-MM-DD hh:mm:ss"); } }