Oracle 主键自增 Native Sequence两种方式(转)
程序员文章站
2022-05-07 20:26:37
...
根据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!
第二种(本人尚未试用,以后更新)
上一篇: (转)oracle中的CURRVAL和NEXTVAL用法
下一篇: 表结构、序列等注意事项