使用sqlserver、mysql時,無論我們使用的是直接jdbc連線資料庫,還是通過hibernate操縱資料庫,我們只需要設定乙個選項或者一行註解便可以實現主鍵的自增長。
但oracle沒有直接提供主鍵自增長的功能,這裡我們可以使用兩種方式來解決主鍵自增長的問題。
第一種,通過序列以及觸發器實現主鍵自增長。
這種方式適用於直接使用jdbc連線資料庫。這種方式將主鍵自增長的任務完全交給資料庫,我們無需在**層面上進行任何控制。
第二種,通過序列以及hibernate配置實現自增長。
這種方式適用於通過hibernate連線資料庫的方式。這種方式在資料庫上建立序列,通過配置在pojo類上的注釋,讓hibernate去呼叫資料庫的序列實現自增長。
這兩種方式都是通過oracle的序列實現自增長,但第一種通過資料庫的觸發器在插入的時候自動插入主鍵。而後者則由hibernate自動完成獲取主鍵,插入主鍵這一操作。
進一步,hibernate的級聯增加也會因為無法獲取到主鍵而無法插入資料到關係表中。
一、通過序列以及觸發器實現主鍵自增長
首先,為每個表建立乙個序列:
1接著,為相對於的表建立觸發器:/*建立序列 */2
--為bitinfo表的主鍵建立序列
3create
sequence bitinfo_id_seq
4 increment by
15 start with1;
6--為product表的主鍵建立序列
7create
sequence product_id_seq
8 increment by
19 start with
1;
1你可以使用下面的語句檢視序列是否已經建立:/*建立觸發器(兩個觸發器請分開執行) */2
--為bitinfo表建立觸發器
3create
orreplace
trigger
trg_bitinfo
4 before insert
ont_yw_bitinfo
5for
each row
6begin
7select bitinfo_id_seq.nextval into :new.id from
dual;
8end
trg_bitinfo;9--
為product表建立觸發器
10create
orreplace
trigger
trg_product
11 before insert
ont_yw_product
12for
each row
13begin
14select product_id_seq.nextval into :new.id from
dual;
15end trg_product;
1二、通過序列以及hibernate配置實現自增長--檢視某位使用者的所有序列
2select sequence_owner,sequence_name from dba_sequences where sequence_owner=
'csy';
3--刪除序列
4drop sequence bitinfo_id_seq;
首先,為每個表建立乙個序列:
1接著,把pojo類主鍵上的注釋改為:/*建立序列 */2
--為bitinfo表的主鍵建立序列
3create
sequence bitinfo_id_seq
4 increment by
15 start with1;
6--為product表的主鍵建立序列
7create
sequence product_id_seq
8 increment by
19 start with
1;
1其中第2、3行宣告該主鍵使用序列來實現自增長,第2行的sequencename指定了序列名(即在上一步驟所建立的序列名)。@id2 @sequencegenerator(name = "prodg",sequencename="product_id_seq",allocationsize=1)
3 @generatedvalue(strategy = generationtype.sequence, generator = "prodg")
4public
intgetid()
第2行的allocationsize指定了自增長的大小,這裡手動設定為1。在hibernate annotation版本(大概是3.2版本)之前,如果不設定這個屬性,其預設為1。
但在3.2版本之後如果不設定allocationsize,則其自增長大小變成50。
oracle 自增長主鍵
1 首先,你要有一張表!create table example id number 4 not null primary key,name varchar 25 phone varchar 10 address varchar 50 2 然後,你需要乙個自定義的sequence create se...
oracle主鍵自增長
oracle主鍵自增長 1 比較土鱉的方式 定義主鍵number型別,之後每次存資料時候,id為取得此表的max id 之後 1,在存放進去 可以用時間作為主鍵,唯一。2 官方版 使用序列方式,增長主鍵。下面介紹使用過程。建立測試表 t sql sql create table t 2 id num...
oracle主鍵自增長
oracle主鍵自增長 1 比較土鱉的方式 定義主鍵number型別,之後每次存資料時候,id為取得此表的max id 之後 1,在存放進去 可以用時間作為主鍵,唯一。2 官方版 使用序列方式,增長主鍵。下面介紹使用過程。建立測試表 t sql sql create table t 2 id num...