Hibernate的ID生成策略

2021-06-21 22:01:02 字數 2645 閱讀 9925

1.介紹

hibernate是目前最為常用的orm框架,當然也有人會選擇ibatis或者其他的架構.這裡我們著重講hibernate的id生成策略

2.可選的id策略生成方式

(1)native/auto

根據不同的資料庫採用不同的id生成方式,例如:在sql server中採用identity; 在mysql中採用auto_increment; 在oracle中就會採用sequence, 注意hibernate會自動幫你建立乙個名字叫hibernate_sequence的序列,不用自己去建立.這也是最常用和省事的.

例子:採用xml方式配置

.....

例子:採用註解方式(注意只要在id的getter上寫上@id就可以了,預設就是@generatedvalue(strategy = generationtype.auto), 另外(strategy = generationtype.auto)也可以不寫.)以下3種方式結果都是一樣.

(a)

@entity(name = "users")

public class user

public void setuid(long uid)

}

(b)

@entity(name = "users")

public class user

public void setuid(long uid)

}

(c)

@entity(name = "users")

public class user

public void setuid(long uid)

}

(2)identity

這種策略在採用sql server

時,相當於sql server的identity關鍵字, 不能用在oracle中.

例子:採用xml配置方式

.....

例子:採用註解方式

@entity(name = "users")

public class user

public void setuid(long uid)

}

(3)sequence

當然採用sequence的就是oracle了.生成方式開始已經說過了.如果要指定sequence的名字那麼請看下面兩個例子

例子:採用xml配置

.....

例子:採用註解方式

@entity(name = "users")

@sequencegenerator(name = "userseq", sequencename = "csu_user_sequence")

public class user

public void setuid(long uid)

}

(4)table

使用一張資料表來管理所有的資料表的主鍵生成,這個最為麻煩,但是用得好會非常方便,尤其是大型專案,資料表非常多的時候.這裡只舉註解的例子,後說明

@entity

@tablegenerator(name = "csdngenerator", table = "csdn_generator", pkcolumnname = "keyname", valuecolumnname = "keyvalue", pkcolumnvalue = "teacher", allocationsize = 1)

public class teacher implements serializable

public void setteaid(long teaid)

}

說明:

(a)@tablegenerator表示這個表要採用table的id生成方式,括號中的各個引數說明:

(i) name表示生成器的名字,在隨後實體的id中要指明.

(ii)table表示在資料庫中生成的管理id生成策略的表的名字.

(iii)pkcolumnname表示主鍵的名字,也就是說記錄每個表主鍵的名字

(iv)pkcolumnvalue表示主鍵的值,每個表主鍵的值

(v)valuecolumnname表示這個表要記錄的主鍵的名字,例如這裡是teacher,那麼在csdn_generator表中就用teacher來記錄主鍵的值

(vi)allocationsize表示每次取得乙個主鍵的值之後增長的步長值,這裡是每次遞增1.

(b)@generatedvalue表示在主鍵中指明具體的id生成策略,,strategy表示要採用的id生成策略,由於這裡採用的是table,當然就是generationtype.table了,generator指出id生成器的名字,這裡就是csdngenerator.

Hibernate的id生成機制

下午學習的過程中遇到乙個問題 很糾結 寫的沒有錯 也能執行就是插不到資料庫裡去,找了很多方法都不行!最後發現 基於xml配置 常見的generator increment 用於long short int型別唯一標識,只有在沒有其他程序往同一張表中插入資料時才能使用,在集群下不能使用 identit...

hibernate的id生成策略

id name id generator class native generator id 其中class常用的值有四個,native identity sequence uuid。注 其中native和uuid不侷限與資料庫。如果用oracle的話。使用native,就會在資料庫中使用seque...

hibernate生成主鍵id的配置

1 identity 用於mysql資料庫。特點 遞增 注 對於mysql資料 庫使用遞增序列時需要在建表時對主鍵指定為auto increment屬性。2 sequence 用於oracle資料庫 序列 名 3 native 跨資料庫時使用,由底層方言產生。default.sequence為hib...