Hibernate主键生成策略

来源:互联网 发布:mba智库百科知乎 编辑:程序博客网 时间:2024/06/15 15:23

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
0 0
原创粉丝点击