Hibernate(3) 主键的生成策略

版权声明:转载需经同意,谢谢! https://blog.csdn.net/Big_KK/article/details/82023124

主键的生成策略

在第一篇的文章中,配置映射文件的时候接触到了主键的生成策略,接下来对这几个策略进行一下说明:

<class name="com.bestbigkk.domain.Person" table="tb_person">
        <!--指示该实体类中哪一属性与表的主键对应,每建立一个映射关系都必须指定!-->
        <id name="id" column="id">
             <!--设置这个实体类映射的表的主键生成策略-->
             <generator class="native"></generator>
        </id>
        ......
</class>

主键生成策略具有以下的几个可选值:

  1. increment
    用于主键类型为long, short, int 类型的主键,由Hibernate以递增的方式生成主键,增量为1, 只有在没有其他进程对同一张表进行操作的时候才可以使用,不适用于集群环境。适用于代理主键。
  2. identity
    使用底层数据库本身提供的主键生成标识符,使用该值需要数据库支持自动增长,所以在Oracle数据库是无法使用该值的,并且要求把数据库中表的主键设置为自动增长的,适用于代理主键。
  3. sequence
    根据底层数据库的序列生成标识符,使用的话数据库需要支持序列,MySql不支持该值。
  4. native
    常用的一个选项,根据底层数据库产生标识符的特点来自动选择使用identity,sequence,hiol三种生成器的一种,适应于代理主键。
  5. uuid
    Hibernate采用128位的UUID算法来生成标识符,该标识符是唯一的,但是因为相比于整数类型的主键它占用了更多的空间,所以并不常用,适用于代理主键,
  6. assigned
    由Java程序指定标识符,适用于自然主键

如果没有指定generator的值,则默认会使用assigned策略

自然主键与代理主键的简述

1.自然主键 : 就是该主键存储的信息是有用的, 比如一个人的工号,可以作为主键存在,并且本条信息是有含义的!
2.代理主键:纯粹是用于区分不同行的信息的,不保存有用的信息,仅仅只是一个主键


猜你喜欢

转载自blog.csdn.net/Big_KK/article/details/82023124