首页 > 代码库 > hibernate 中mysql的id生成策略

hibernate 中mysql的id生成策略

数据库的规划和操作号码大全中,咱们一般会给表建立长尾关键词挖掘工具的主键。 

主键,可以分为天然主键和署理主键。 

天然主键表明:选用具有事务逻辑意义的字段作为表的主键。比方在用户信息表中,选用用户的身份证号码作为主键。可是这样一来,跟着事务逻辑的变化,主键就有可能要更改。比方,假定哪天身份证号码升级成19,2位,那。。。。。。。 

署理主键:在表中人为的添加一个字段,该字段并没有表明任何的事务逻辑,仅仅用来标识一行数据。比方说在用户信息表中,添加一个用户ID的字段。用来表明该条用户信息的记录。 

 

一般情况下,用的对比多的是署理主键的方法。并且,咱们习气于于让该主键字段可以主动增加,来保证其仅有性。可是,不一样的数据库主动增加的方法并不是一样的。如在SQLSERVER中,用identity,MYSQL中,有increment,ORACLE中一般选用sequence。这样一来,在数据库的主键列操作上,便会显得对比费事。 

可是在Hibernate中,提供了主键生成战略。下面是对比常用的几种: 

1:assigned 

----表明在新增数据时由应用程序指定主键的值。首要针对主键是选用天然主键的方法。这种方法,适用于主键列不是主动增加列。 

 

其缺陷为在履行新增操作时,需查询数据库判别生成的主键是否现已存在。 

2:increment 

----表明新增数据操作时由hibernate主动生成主键值。其生成的值为:先查询该主键列的最大值,然后在最大值的基础上加上1.适用于选用署理主键方法的主键列。相同不能用于主键列是主动增加的表。可是,该主键生成战略也有些缺陷。 

(1)新增数据前先查询一遍,影响了功能。 

(2)主键的类型只能为数值型的int或者long 

(3)并发操作时的抵触疑问。 

3:identity 

----不如说是为sqlerver数据库量身定做的。首要适用于sqlserver数据库的主动增加列的表。 

4:native 

----表明依据不一样的数据库选用不一样的主键生成战略。比方,当时数据库为sqlserver,则会选用identity,如为oracle,则选用 

 

 

oracle中的sequence等。区别数据库的不一样是以hibernate主配置文件中sessionFactory中配置的数据库方言。 

 

5.uuid 

 

 

* 仅有主键生成方法。从Hibernate中提取出来 

 

长处:避免了生成ID 时,与数据库的再次交道,功能上较高。但关于有的开发人员不太习气这种id生成方法,UUID生成的32为的字符串,不一样于identity 从1开端的整数。 

  

 

 

 

选用hibernate的主键生成战略,就可以对比灵敏和方便的对表中的主键字段进行操作了。并且,不一样的数据库,不一样的主键方法,也只需要修改下映射文件就可以了