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则继续插入工作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值