Hibernate 主鍵介紹
小編:管理員 340閱讀 2022.09.14
Hibernate有如下主鍵:
Native:
Assigned:
Increment:
Identity:
Sequence:
Hilo:
UUID:
Foreign GUID:
Native:
- Native主鍵生成方式會根據不同的底層數據庫自動選擇Identity、Sequence、Hilo主鍵生成方式。特點是根據不同的底層數據庫采用不同的主鍵生成方式。由于Hibernate會根據底層數據庫采用不同的映射方式,因此,便于程序移植,項目中如果用到多個數據庫時,可以使用這種方式。
Assigned:
- Assigned方式由程序生成主鍵值,并且要在save()之前指定,否則會拋出異常。特點是主鍵的生成值完全由用戶決定,與底層數據庫無關。用戶需要維護主鍵值,在調用session.save()之前要指定主鍵值。
Increment:
- Increment方式對主鍵值采取自動增長的方式生成新的主鍵值,但要求底層數據庫支持Sequence方式,如Oracle、DB2等。需要在映射文件xxx.hbm.xml中加入Increment標識符的設置。特點是由Hibernate本身維護,適用于所有的數據庫,不適合多進程并發更新數據庫,適合單一進程訪問數據庫,不能用于群集環境。
Identity:
- Identity根據底層數據庫來支持自動增長,不同的數據庫用不同的主鍵增長方式。特點是與底層數據庫有關,要求數據庫支持Identity,如MySQL中是auto_increment,SQL Server 中是Identity,支持的數據庫有MySQL、SQL Server、DB2、Sybase和HypersonicSQL。Identity無須Hibernate和用戶的干涉,使用較為方便,但不便于在不同的數據庫之間移植程序。
Sequence:
- Sequence需要底層數據庫支持Sequence方式,例如Oracle數據庫等。特點是需要底層數據庫支持序列,支持序列的數據庫有DB2、PostgreSql 、Oracle、SAPDb 等在不同數據庫之間移植程序,特別是從支持序列的數據庫移植到不支持序列的數據庫需要修改配置文件。
Hilo:
- Hilo使用高低位算法生成主鍵,高低位算法使用一個高位值和一個低位值,然后把算法得到的兩個值拼接起來作為數據庫中的唯一主鍵。Hilo方式需要額外的數據庫表和字段提供高位值來源。默認情況下,使用的表是hibernate_unique_key,默認字段叫做next_hi。next_hi必須有一條記錄,否則會出現錯誤。特點是需要額外的數據庫表的支持,能保證同一個數據庫中主鍵的主鍵的唯一性,但不能保證多個數據庫之間主鍵的唯一性。Hilo主鍵生成方式由Hibernate維護,所以,Hilo方式與底層數據庫無關,但不應該手動修改hilo算法使用的表值,否則會引起主鍵重復的異常。
UUID:
- UUID使用128位UUID算法生成主鍵,能夠保證網絡環境下主鍵的唯一性,也就能夠保證不同數據庫及不同服務器下主鍵的唯一性。特點是能夠保證數據庫中主鍵的唯一性,生成的主鍵占用比較多的存儲空間。
Foreign GUID:
- Foreign用于一對一關系中。GUID主鍵生成方式使用了一種特殊算法,保證生成主鍵的唯一性,支持SQL Server 和MySQL.
相關推薦
- 經典筆試題-JDBC及Hibernate篇 五、JDBC 及Hibernate:(共12 題:基礎10 道,中等難度2 道)110、數據庫,比如100 用戶同時來訪,要采取什么技術解決?【基礎】 答:可采用連接池。111、什么是ORM?【基礎】 答:對象關系映射(Object—Relational Mapping,簡稱ORM)是一種為了解決面向對象…
- Hibernate Criterion 在查詢方法設計上能夠靈活的依據Criteria的特點來方便地進行查詢條件的組裝.Hibernate設計了CriteriaSpecification作為Criteria的父接口,以下提供了Criteria和DetachedCriteria.Criteria和DetachedCriteria的主要差別在于創建的形式不一樣,Criteria是在線的,所…