`
kewen342757003
  • 浏览: 142936 次
社区版块
存档分类
最新评论

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

 
阅读更多
一般我们在数据库中建表,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层没有任何错误,但是后续程序出错,那么你这个时候查看数据库,会发现数据好像并没有被插入。 但是当你完成了下一次成功的操作后,前面的值也会全部被插入。
分享到:
评论
1 楼 kyfxbl 2012-12-14  
说得好啊,学习了

相关推荐

Global site tag (gtag.js) - Google Analytics