根据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"