Oracle 主键自增 Native Sequence两种方式(转)

根据hibernate的文档,有两种方式实现实体对象的主键自动增长。 
第一种:设置ID的增长策略是sequence,同时指定sequence的名字,最好每个表建一个sequence,此种做法就如同MY-SQL中的自动增长一样,不需要创建触发器,具体的oracle数据库脚本及hibernate配置文件如下:

[1]oracle数据库创建sequence:

-- Create sequence 
create sequence TYPEID
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

以上属性,大都看一下中文就能明白其中的意思,唯独最后一个:cache是多少数字放进数据库缓存等待程序去调用它们来命名ID。如果cache设置数字太大,那么ID就会有跳序号的可能(比如调用了1-18的序号就关闭与数据库的会话,那么19和20将会被丢弃,下次取序号就会跳到21开始);而如果设置数字太小,缓存log将会很多。

[2]hibernate映射文件的配置:

<id name="id" type="java.lang.Integer">
            <column name="ID" length="27" />
            <generator class="sequence" >
                <param name="sequence">TYPEID</param>
            </generator>
        </id>
        <property name="telephone" type="java.lang.String">
            <column name="TELEPHONE" length="12" not-null="true" />
        </property>

 在hibernate映射文件中,对ID的生成策略选择sequence,指定sequence的名字TYPEID就可以了,当你保存新对象的时候,hibernate会自动取得从start with开始的序号作为新对象的ID保存到数据库,所以不需要再使用触发器再来生成新记录的ID!

第二种(本人尚未试用,以后更新)

猜你喜欢

转载自coyotestark.iteye.com/blog/2268883