Hibernate主键生成策略

本文深入探讨了数据库中主键生成的多种策略,包括identity、sequence、hilo和native等,详细阐述了每种方法的特点、适用场景及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. identity

    1.1 实现

      <id name="id" column="id" type="int">
          <generator class="identity"/>
      </id>

    1.2 注意

       1.2.1此种方法只适用于存在自增的数据库,如mysql中的auto_increment,sql server中的Identity,支持的数据库有MySql、SQL Server、DB2、Sybase和HypersonicSQL
       1.2.2 用此种方式建表,会根据数据库不同自动创建主键为自增类型
       1.2.3 作用:使用数据库的字段自增说明来生成主键

2. sequence

    2.1 实现

       <id name="id" column="id" type="int">
          <generator class="sequence"/>
       </id>

    2.2 注意

       2.2.1此方法适合于没有自增的数据库
       2.2.2 适合的数据库为Oracle 、DB2(Mysql/SQlServer不支持)、PostgreSql、SAPDb
       2.2.3 作用:使用数据库的sequence来生成主键

3.hilo

   3.1 实现

    <id name="id" column="id" type="int">
           <generator class="hilo">
              <param name="table">hi_value</param>
              <param name="column">next_value</param>
              <param name="max_lo">10</param>
           </generator> 
    </id>

   说明:需要一个辅助表,用来生成主键,table为生成主键的表,column为生成的主键的列,max_lo为间隔的值

   3.2 注意

     3.2.1 作用:另外生成一张表,专门用来生成主键,从而实现主键自增
     3.2.2对于既没有字段自增说明,又没有sequence的数据库很好用微笑

4. native

   说明:native会根据数据库的不同自动选择identity、sequence、hilo方式生成主键,所以说通用性最强

5.  increment

    存在多线程不安全问题,所以直接别用

6.  assigned
       手工指定id

7. uuid

  生成uuid类型的id


   总结:
   1) 如果主键是int、long,可以直接使用native自动生成主键,如果主键是String,可以使用uuid自动生成主键
   2) 一般来说只推荐使用native和uuid
   3) UUID,increment、Hilo、assigned:对数据库无依赖
   4) identity、sequence主键都依赖数据库的生成方式
   5) native根据数据库自动选择是identity、sequence、hilo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值