SQL SERVER 和 ACCESS 以及 MYSQL 中, 都有一种自增字段, 通常被用来做主键或索引键, 但是 ORACLE 中,确并没有提供这种功能 ,但我们确经常需要这个功能,可以用以下方法解决,
一,如果你不在集群环境下使用,并且用到了hibernate,那么可以用hibernate提供的产生自动增长类型主键的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 实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键,
increment不能在集群环境下使用,
二,使用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是在数据库中新建的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实现的,下面给出ORACLE的一种实现方式
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即可,