hibernate 中持久化標識 OID

OID 全稱是 Object Identifier,又叫作對象標識符數據庫

是 hibernate 用於區分兩個對象是不是同一個對象的標識的方法併發

標識符的做用:可讓 hibernate 來區分多個對象是不是同一個對象ide

hibernate 的主鍵生成策略:ui

  • 天然主鍵:把具備業務含義的字段做爲主鍵,稱爲天然主鍵,例如用戶表,將 username 做爲主鍵;前提是全部用戶的 username 都不會重複,而且不爲 null,不容許修改,但一旦出現了username 能夠重複的業務需求,就必須修改數據模型,從新定義表的主鍵,給數據庫的維護增長了難度
  • 代理主鍵:把不具備業務含義的字段做爲主鍵,稱之爲代理主鍵,該字段通常取名爲 「ID」,一般爲整數類型(整數比字符串類型節省更多的空間),可是注意主鍵溢出問題(通常狀況下直接就分庫分表存儲)
  • lncrement:自動增加,是Hibernate中提供一種自動增加方式,不是數據庫中的自動增加。(適用於short、int、long類型的主鍵),hibernate

    • 首先使用select max(cust_id) from cst_customer;將這個最大值+1做爲下一條記錄的主鍵。
    • 對於併發訪問數據庫不適用
  • identity:自動增加,適用於short、int、long類型的主鍵,使用的是數據庫自動增加機制。不是全部數據庫都支持自動增加,好比Oracle沒有自動增加。代理

  • sequence :序列,適用於short、int、long類型的主鍵,使用序列方式完成主鍵的生成。必須是支持序列的方式的數據庫。Oracle的自動增加對象

  • native:本地策略,根據底層的數據庫不一樣,自動選擇使用identity仍是sequence。開發

  • uuid:隨機字符串,適用於字符串類型的主鍵。
  • assigned:Hibernate不維護主鍵,開發人員須要手動設置主鍵。

結論:若是是針對數值型,選擇使用 native, 若是是 varchar 類型,可使用 uuid,也能夠不用 hibernate 維護,本身在程序中手動設定惟一非空(assigned)uuidrem

相關文章
相關標籤/搜索