首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernian native 主键 与oracle从增序列触发器

2012-08-28 
Hibernian native 主键 与oracle自增序列触发器---!下面的内容理解可能是错误的,希望大家不要被误导--??

Hibernian native 主键 与oracle自增序列触发器

<---!下面的内容理解可能是错误的,希望大家不要被误导-->

?

?

使用hibernate的自动建表功能,如果主键是int 且为 native ,则在建表语句的最后面hibernate会多出一个sql语句

“create sequence hibernate_sequence”,每添加一条记录,select hibernate_sequence.nextval from dual;insert into ProductionCategory (name, ID) values (?, ?);都会多一条elect hibernate_sequence.nextval from dual;的sql语句。但是个人觉得这个hibernate其实并没有在oracle中真正的创建了序列和触发器,因为在oracle中,你插入一条记录时设定id值的话,这个id值将会被保存,而如果是触发器则,无论你的id设置为何值,他都是从序列里面取出下一个值:

insert into method(id,name) values (125,'asd');

?

select * from method;

?

?? ? ? ?ID NAME

---------- -------------------------

?? ? ? ?21 asdfasd

?? ? ? ?22 assadfasdd

?? ? ? ?23 asd

?

由此可见,hibernate的sequence 只是在hibernate框架内部自己维持每个表格的自增,然后将自增的值写入数据库中,也就是在oracle中,hibernate并没有真正的创建senquence何trigger,表格的主键hibernate把他设置为assigned,然后id的值有hibernate自己生成,加到数据中,最后保存到数据库中。如果此时你在oracle中用sql语句添加了一条id较大的记录,hibernate执行插入时,还是从他自己的内部自增序列中取值,当内部自增的取值刚好等于我们在oracle中用sql插入的id相同时,hibernate不做插入动作,但是好像也不报错,当下一条记录要插入时,hibernate则继续插入工作。

热点排行