hibernate的配置文件里不是有主鍵生成策略的配置嗎?可以手動指定,也可以自動生成的。
公司主營業(yè)務(wù):做網(wǎng)站、網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出高臺免費(fèi)做網(wǎng)站回饋大家。
hibernate主鍵生成機(jī)制
1) assigned
主鍵由外部程序負(fù)責(zé)生成,無需Hibernate參與。
2) hilo
通過hi/lo 算法實現(xiàn)的主鍵生成機(jī)制,需要額外的數(shù)據(jù)庫表保存主
鍵生成歷史狀態(tài)。
3) seqhilo
與hilo 類似,通過hi/lo 算法實現(xiàn)的主鍵生成機(jī)制,只是主鍵歷史
狀態(tài)保存在Sequence中,適用于支持Sequence的數(shù)據(jù)庫,如Oracle。
4) increment
主鍵按數(shù)值順序遞增。此方式的實現(xiàn)機(jī)制為在當(dāng)前應(yīng)用實例中維持
一個變量,以保存著當(dāng)前的最大值,之后每次需要生成主鍵的時候
將此值加1作為主鍵。
這種方式可能產(chǎn)生的問題是:如果當(dāng)前有多個實例訪問同一個數(shù)據(jù)
庫,那么由于各個實例各自維護(hù)主鍵狀態(tài),不同實例可能生成同樣
的主鍵,從而造成主鍵重復(fù)異常。因此,如果同一數(shù)據(jù)庫有多個實
例訪問,此方式必須避免使用。
5) identity
采用數(shù)據(jù)庫提供的主鍵生成機(jī)制。如DB2、SQL Server、MySQL
中的主鍵生成機(jī)制。
6) sequence
采用數(shù)據(jù)庫提供的sequence 機(jī)制生成主鍵。如Oralce 中的
Sequence。
7) native
由Hibernate根據(jù)底層數(shù)據(jù)庫自行判斷采用identity、hilo、sequence
其中一種作為主鍵生成方式。
8) uuid.hex
由Hibernate基于128 位唯一值產(chǎn)生算法生成16 進(jìn)制數(shù)值(編碼后
以長度32 的字符串表示)作為主鍵。
9) uuid.string
與uuid.hex 類似,只是生成的主鍵未進(jìn)行編碼(長度16)。在某些
數(shù)據(jù)庫中可能出現(xiàn)問題(如PostgreSQL)。
10) foreign
使用外部表的字段作為主鍵。
一般而言,利用uuid.hex方式生成主鍵將提供最好的性能和數(shù)據(jù)庫平臺適
應(yīng)性。
1.先建一個序列:
--?Create?sequence?
create?sequence?auto_id
minvalue?1
maxvalue?9999999999999
start?with?1
increment?by?1
cache?10;
2.創(chuàng)建觸發(fā)器:
create?or?replace?trigger?auto_col_trigger
before?insert?on?auto_tab
for?each?row
declare
v_id?number?:=?0;
begin
select?auto_id.nextval?into?v_id?from?dual;
:new.id?:=?v_id;
end;
我隨便寫的,表名和字段名改一下就行了。
1.創(chuàng)建表時:
create table table_name
(
first_name varchar2(12),
second_name varchar2(10),
idcard varchar(36),
home_name varchar(66),
constraint pk_table_name primary key(first_name,second_name,idcard) -- 聯(lián)合主鍵
);
2.創(chuàng)建表之后追加聯(lián)合主鍵
alter table table_name add constraint pk_table_name primary key (first_name,second_name);
使用oracle數(shù)據(jù)庫中的關(guān)鍵字sequence來實現(xiàn)目的。
//創(chuàng)建mySeq
create sequence mySeq
start with 1
increment by 2
maxvalue 40
minvalue 1
cycle
//創(chuàng)建用戶表
create table USER
(
Id int,
CompName varchar2(20)
)
插入語句可以這樣寫:
insert into USER values(mySeq.nextVal,'AA')
這樣的話每次插入的ID就是自動遞增的
擴(kuò)展資料:
sequence用法:
create sequence 序列名稱
start with 起始數(shù)
increment by 增長量
[maxvalue 值]
[minvalue 值]
[cycle 當(dāng)?shù)竭_(dá)最大值的時候,將繼續(xù)從頭開始]
[Nocycle -- 一直累加,不循環(huán)]
[Cache ]
參考資料:百度百科-oraclesequence
工具/材料
SQL Developer
01
首先打開SQL Developer軟件,找一個沒有主鍵約束的表,如下圖所示
02
然后我們新建一個查詢,在界面中輸入如下的約束修改語句,如下圖所示,主要通過add constranint來添加約束
03
編寫完約束添加語句以后,點(diǎn)擊工具欄中的執(zhí)行按鈕,如下圖所示,如果輸出欄顯示已變更則證明主鍵約束創(chuàng)建成果
04
然后我們進(jìn)入STUDENT表的約束添加頁中可以看到,我們加的主鍵約束已經(jīng)添加進(jìn)去了,如下圖所示
05
另外,創(chuàng)建表的時候可以直接添加主鍵約束,如下圖所示,直接在表創(chuàng)建語句中添加constraint即可
06
表創(chuàng)建完以后,記得在左側(cè)刷新數(shù)據(jù)庫信息,如下圖所示,因為你創(chuàng)建的信息不刷新的話不會更新
07
最后打開你所創(chuàng)建的表,看到你添加的主鍵約束已經(jīng)加入進(jìn)來了,這種方式的效果alter的方式是一樣的