Hibernate的主键生成策略(hibernate的主键相关问题)

对于Hibernate的主键相关问题:

hibernate的主键生成有8中方式,下面一一列举这几种方式:

(1)increment,自增策略:

在每一次新增数据的时候,新纪录的主键是之前数据的主键最大值+1。

缺点:我们尽量不要使用increment这种方式,因为它有严重的并发性访问的问题。

事例:<generator class="increment"></generator>

(2)identity ,数据库主键策略

像mysql/sqlserver这些数据库,数据库是自带生成主键的策略的,所以在我们使用的时候,

我们可以使用identity的方式来完成,而对于oracle来说。我们就无法使用这种生成策略而是下面的sequence的方式了。

事例:<generator class="identity"></generator>

(3)sequence ,序列生成策略

对于oracle来说,我们使用sequence的方式生成主键。如下面的代码:class里写的是策略方式,而name里

是说明策略,值是对应的那个序列名字。

<generator class="sequence">
<param name="sequence">seq_emp</param>
</generator>

(4) hilo(highlow)高低值策略:

高低值策略不依赖数据库生成主键的特性,可以在任何数据库中进行兼容低值策略需要在数据库中增加一张表来维护主键的数据

缺点高低值算法执行效率较低,每一次都要产生写Hilo的工作,并且产生的结果不连续,造成主键区域的冗余浪费

事例:

<generator class="hilo">

<param name="table">hilo</param>表名叫做hilo ,列名为value

<param name="column">value</param>
</generator>

(5)native本地策略:

这个策略会根据你设置的“数据库”(类似于我们的方言(oracle/mysql....)),来自动选择合适的生成策略。它是一种智能的序列生成策略。比如:

如果Hibernate的数据库方言是MySQLDialect , SQLServerDialect ,它自动会选择identity

如果Oracle的时候会自动选择SEQUENCE

其他的情况下,会尝试使用HILO算法

事例:

<generator class="native">

<param name="table">hilo</param>表名叫做hilo ,列名为value

<param name="column">value</param>

<param name="sequence">seq_emp</param>

</generator>

(6)assigned 手动生成策略

这个策略是手动的去指定,不再自动生成。

就是自己在代码里自己给主键对应的那个字段赋值。

  (7)uuid与guid策略:

UUID:Universally Unique Identifier,是指在一台机子上生成的数字,它保证在同一时空中的所有机器都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。

GUID:Globally Unique Identifier全球唯一标识符,是一个128位长的数字,用16位进制表示。算法的核心思想是结合网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一个机器每秒产生100000000个GUID,则可保证3240年不重复。

注意:使用uuid与guid的时候,首先保证数据库中的主键的类型大小设置够这两个策略的大小,类型设置为字符串类型的数据类型。(与之对应的,你编辑的实体类也要改变类型的。)

<generator class="uuid"></generator>

(<generator class="guid"></generator>)





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无殇的无奈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值