SQL SERVER 和 ACCESS 以及 MYSQL 中, 都有一種自增字段, 通常被用來做主鍵或索引鍵, 但是 ORACLE 中,確并沒有提供這種功能 ,但我們確經(jīng)常需要這個功能,可以用以下方法解決,
一,如果你不在集群環(huán)境下使用,并且用到了hibernate,那么可以用hibernate提供的產(chǎn)生自動增長類型主鍵的increment策略,如下
在**.hbm.xml(hibernate映射文件)中配置如下
<class name="com.xx.xx.Test" table="TEST">
<id name="id" type="int" column="ID">
//該句指定使用hibernate自帶的increment策略生成主鍵
<generator class="increment"/>
</id>
<property name="uname" type="java.lang.String" column="UNAME"/>
</class>
這樣,在java文件中對表增加記錄時,只需添加除ID外的其他字段,然后save即可,
注意 ,increment 實現(xiàn)機制為在當前應用實例中維持一個變量,以保存著當前的最大值,之后每次需要生成主鍵的時候將此值加1作為主鍵,
increment不能在集群環(huán)境下使用,
二,使用hibernate的sequence策略,在oracle中新建一個sequence,在hibernate中使用,如下
在**.hbm.xml(hibernate映射文件)中配置如下
<class name="com.xx.xx.Test" table="TEST">
<id name="id" type="int" column="ID">
//該句指定使用hibernate自帶的sequence策略生成主鍵 ,TEST_SEQ是在數(shù)據(jù)庫中新建的sequence的名稱
<generator class="sequence">
<param name="sequence">TEST_SEQ</param>
</generator>
<property name="uname" type="java.lang.String" column="UNAME"/>
</class>
這樣,在java文件中對表增加記錄時,只需添加除ID外的其他字段,然后save即可,
三,以上兩種方法都是通過hibernate實現(xiàn)的,下面給出ORACLE的一種實現(xiàn)方式
1. 建立 SEQUENCE
CREATE [ OR REPLACE ] SEQUENCE sequence_identity START WITH initial seed INCREMENT BY step MAXVALUE upper bound [NOMAXVALUE] NOCYCLE [empty]
2. 建立 TRIGGER
CREATE [ OR REPLACE ] TRIGGER trigger_identity BEFORE INSERT ON table_name FOR EACH ROW BEGIN SELECT sequence_identity.NEXTVAL INTO :new.column_name FROM DUAL; END;
這樣,在java文件中對表增加記錄時,只需添加除ID外的其他字段,然后save即可,