Hibernate ---- 主键生成策略

主键生成策略的整体概括。


注意:仔细区分不同主键生成策略的不同,如果主键的生成策略选择错误在执行表的操作的时候,会由于并发和锁的问题导致很多的错误,然后抛出异常。







sql语句的结果是:

由于他是需要hibernate管理的,所以每次都是先查后插入。




如果在程序中设置断点,那么当一个进程查询到了一个id结果,比如是1,但是没有提交的时候,另一个进程如果执行该操作也会先查询,那么查询的结果还是刚刚的id=1.当第二个进程提交的时候会出现id = 2 。那么第一个进程此时提交会出现问题。出现id主键冲突的报错。因此只能用于单进程。


与increment不同的是,该主键是由数据库产生的。



需要在person的类中添加一个属性,为uuid,并且生成相应的getter和setter。


在配置文件中也需要相应的修改需要两个位置。


执行结果:


相比于increment,uuid可以用于多线程。因为他是不会重复的32位的String、并且他也是由框架产生。




assign也是唯一的一个自然主键的生成方式,需要手动的设置主键。


主键生成机制如何实现的?

数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。

参考:http://zuoqiang.iteye.com/blog/755813

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值