zoukankan      html  css  js  c++  java
  • hibernate中generator的取值(主键生成方式)

    hibernate中的主键生成方式是在***.hbm.xml文件中指定的,例如:

     <id name="studentId" type="java.lang.Integer">
                <column name="STUDENT_ID" />
                < generator  class="native" />
      </id>

    这里面的generator元素就是指定主键生成方式的配置。

    class属性的取值有increment、hilo、identity、sequence、native、assigned、select、seqhilo、foreign、guid等等

    1)increment

      ①由Hibernate以递增的方式为代理主键赋值

      ②Hibernate会先读取数据库表中主键的最大值,插入记录以最大值+1的形式为主键

      ③不依赖底层数据库系统,所以适用于各类数据库系统

      ④在多线程下很容易发生错误,错误的原因是:各个线程获取数据库表中的主键的最大值相同,都以最大值+1的形式作为主键插入到数据库表中,那么会违反数据库表主键唯一性约束,就会报错。

      ⑤OID必须为long、int或short类型,如果为byte则会抛出异常。

    2)hilo

      ①hibernate以high/low算法生成主键

    3)identity

      ①由具体数据库生成主键

      ②要求数据库将主键定义为自动增长类型

      ③支持自增主键的数据库:MySQL、DB2、SQL server 、sybase等,oracle不支持

      ④OID必须为long、int或short类型,如果为byte则会抛出异常。

    4)sequence

      ①利用底层数据库提供的序列生成标识符

      ②要求底层支持序列:DB2、Oracle

      ③OID必须为long、int或short类型,如果为byte则会抛出异常。

    配置如下:

    <id name="studentId" type="java.lang.Integer">
                <column name="STUDENT_ID" />
                <generator class="sequence" >
                    <param name ="sequence">stu_seq</ param>
                </generator>           
    </id>

    5)native

      ①依据底层数据库对自动生成标识符的支持能力,来选择使用identity、sequence或者hilo

      ②native标识符生成器能够根据底层数据库系统的类型,自动选择合适的方式生成主键,所以适合跨数据库平台开发

      ③OID必须为long、int或short类型,如果为byte则会抛出异常。

    6)assigned

      hibernate和数据库系统都不负责生成主键的值,完全由程序员自己生成。

  • 相关阅读:
    python版本升级及pip部署方法
    Redis集群管理(二)
    UP UP UP!(dp)
    One Way Roads(搜索)
    Back to Underworld(搜索)
    队列链表实现以及有序表的合并
    第八届郑州轻工业学院ACM(程序设计大赛)校内预选赛
    Modulo Sum(背包 + STL)
    Co-prime Array&&Seating On Bus(两道水题)
    Hard Process(二分)
  • 原文地址:https://www.cnblogs.com/dingcx/p/7704920.html
Copyright © 2011-2022 走看看