以前开发一直在用MSSQL,MYSQL 没有用过 oracle,现在有后发现ID没有自动增长的功能,MSSQL,MYSQL在这方面方便,只用一个关键字可以设置了,但 oracle还要绕一个大圈,又要在 oracle中先写序列,而且每个表都要创建一个序列,还要用触发器中调用序列或在程序中配置调用序列。呵呵。下面来说一下oracle与hibernate中实现ID的自动增长。
1、先创建序列:
CREATE SEQUENCE myseq --创建序列,名为:myseq
START WITH 1 --从1开始
MAXVALUE 999999999 --最大值
INCREMENT BY 1 --每次递增 1
ORDER --排序
NOCYCLE; --避免重新开始,关闭循环
2、hibernate 配置
2.1、 hibernate 注释配置
2
private
Integer id;
3 @Id
4 @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = " myseq_test " )
5 @SequenceGenerator(name = " myseq_test " ,sequenceName = " myseq " ,allocationSize = 1 )
6 public Integer getId() {
7 return id;
8 }
9 public void setId(Integer id) {
10 this .id = id;
11 }
3 @Id
4 @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = " myseq_test " )
5 @SequenceGenerator(name = " myseq_test " ,sequenceName = " myseq " ,allocationSize = 1 )
6 public Integer getId() {
7 return id;
8 }
9 public void setId(Integer id) {
10 this .id = id;
11 }
注:其中 myseq 为序列名称,myseq_test 为myseq 别名。allocationSize要注意:我参考官方文档配置,但是官方文档没有配置这个属性,导致我的序列默认不是按照1递增的,
加上就可以了。
2.2、 hibernate xml配置,在你的hbm.xml中配置
2
<
id column
=
"
ID
"
name
=
"
id
"
type
=
"
integer
"
>
3 < generator class = " sequence " >
4 < param name = " sequence " > seq_id </ param >
5 </ generator >
6 </ id >
3 < generator class = " sequence " >
4 < param name = " sequence " > seq_id </ param >
5 </ generator >
6 </ id >