欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hibernate Oracle数据库如何配置主键自增

程序员文章站 2022-06-02 16:49:08
...
一般我们在数据库中建表,ID都会作为主键,主键作为一个每次新建数据自增加1的字段,大部分情况下作为唯一标识。

那么如何配置使得主键可以实现自增功能?

首先新建一个数据库表
-- Create table
create table TBL_SCHEDULE_TEMPLATE
(
ID VARCHAR2(100) not null,
NAME VARCHAR2(4000) not null,
PROJECT VARCHAR2(100) not null,
) //我这个就偷懒全设成varchar2了, 顺便也请问一下大家 这样做会不会不好?


之后对应这张表,逆生成java实体和hibernate配置文件,这个问题可以参考
http://862123204-qq-com.iteye.com/blog/1555379 这个里面有详细的如何使用Eclipse逆生成实体和配置文件。

假设已经有个java实体和hibernate的配置文件

现在需要在数据库中建立一个序列 sequence

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

现在只需要做一步,修改hibernate配置文件,将你希望实现自增的字段,配置成如下样子:
<id name="id" type="string">
<column name="ID" precision="16" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_TEMPLATE</param>
</generator>
</id>



这里补充一下
1.配置好自增之后,如果你再在dao层中设置主键的值,例如
XXXX.setID("1")

那么这行代码其实是无效的,系统将自动使用序列值覆盖掉你写的值。

2.如果dao层对数据库进行操作,但是程序报错的话,那么你的序列值是已经被使用过的
例如你前面对数据库插入5条数据,但是由于某些错误,没有完成,那么1-5 的***是已经被使用过的,当你再成功插入值后,这个ID将会是6

3.对第二条补充一下,如果你的dao层没有任何错误,但是后续程序出错,那么你这个时候查看数据库,会发现数据好像并没有被插入。 但是当你完成了下一次成功的操作后,前面的值也会全部被插入。