hibernate主键生成策略

1、主键的分类:

      1、1自然主键:主键的本身就是表中的一个字段,(实体中的一个具体的属性)。比如:创建一个人员表,使用身份证号码作为主键,这叫做自然主键。

     1、2代理主键:主键的本身不是表中一个必须的字段。比如使用id,tid等作为主键,这叫做代理主键。

     在实际开发中:尽量使用代理主键,因为:一旦自认主键参与到业务逻辑中,后期有可能要修改源代码,比如在输入采用身份证号码作为主键,一旦身份证号码在录入的过程中出现错误,则不可能通过sql语句进行更改(update * set id =id1 where id= id?),这种语句是错误的,因为数据库的主键不能被更改。

2、主键的生成策略:

      》  increment     :适用于short,int,long,类型的主键,由于采用的是hibernate的自动增长机制,所只能在单线程中使用,其内部实现过程是,首先发送一条语句,select max(id) form 表,然后将id+1作为插入数据的主键,如果在多线程中使用,有可能会出现重复的主键值,这是不允许的。  

       》  identity         :适用于short,int,long类型的主键,适用的是数据库底层的自动增长机制。适用于有自动增长机制的数据库(mysql、mssql),注意oracle没有自动增长机制 

       》  sequence      :适用于short,int,long,类型的主键,采用的是序列的方式(比如oracle数据库) 

       》  uuid                :适用于字符串类型主键,使用hibernate中的随机方式生成字符串主键

       》  native             :本地策略,可以在indentity和sequence之间进行自定切换。

       》  assigned          :hibernate放弃主键的管理,需要通过手动编写程序或者用户自己设置。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值