Hibernate主键生成策略

在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开始的整数。 
  


Xml代码 
1.<id name="实体类属性名" type="java.lang.Integer">   
2.      <column name="对应表中主键字段名" />   
3.      <generator class="assiged|increment|identity|native|........" />   
4.</id>   
<id name="实体类属性名" type="java.lang.Integer"> 
      <column name="对应表中主键字段名" /> 
      <generator class="assiged|increment|identity|native|........" /> 
</id> 


采用hibernate的主键生成策略,就可以比较灵活和方便的对表中的主键字段进行操作了。而且,不同的数据库,不同的主键形式,也只需要修改下映射文件就可以了

转载于:https://my.oschina.net/u/1451028/blog/387345

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值