我是靠谱客的博主 粗心唇膏,最近开发中收集的这篇文章主要介绍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和数据库系统都不负责生成主键的值,完全由程序员自己生成。

 

转载于:https://www.cnblogs.com/dingcx/p/7704920.html

最后

以上就是粗心唇膏为你收集整理的hibernate中generator的取值(主键生成方式)的全部内容,希望文章能够帮你解决hibernate中generator的取值(主键生成方式)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部