Hibernate学习笔记4(主键生成策略)

1.自然主键

自然主键:主键本身就是表中的一个字段(实体中的一个自然属性)
–创建一个人员表,人都会有一个身份证号(唯一不可重复),使用身份证号作为主键,这种主键称为自然主键。

2.代理主键

  • 代理主键主键本身不是表中必须的一个字段(不是实体中的某个具体的属性)
    –创建一个人员表,没有使用人员的身份证号,用了一个与这个表不相关的字段ID,(PNO)。这种主键称为代理主键。
  • 实际开发中,尽量使用代理主键
    • 一旦自然主键参与到业务逻辑中,后期有可能需要修改源代码。
    • 好的程序满足OCP原则,对程序的扩展是open的。对修改源码是close的。

3.Hibernate的主键生成策略

在实际开发中一般不允许用户手动设置主键,一般将主键交给数据库,手动编写程序进行设置。在Hibernate中为了减少程序编写,提供了很多的主键生成策略。

  • increment
    hibernate提供的自动增长机制,适用short ,int,long类型的主键,在单线程程序中使用。多线程会出错
    首先发送一条语句 selest max(id) from 表,然后让id+1作为下一条记录的主键。
  • identity
    适用short ,int,long类型的主键,使用的是数据库底层的数据增长机制,适用于有自动增长机制的数据库(mysql , mssql )
  • sequence
    适用short ,int,long类型的主键,采用的是序列的方式(oracle)支持序列,mysql不能用sequence
  • uuid
    适用于字符串类型主键,使用hibernate中的随机方式生成字符串主键
  • native
    本地策略,可以在identity和sequence之间进行自动切换
  • assigned
    hibernate放弃外键的管理,需要通过手动编写程序或者用户自己设置。
  • foreign
    外部的,一对一的一种关联映射情况下使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值