hibernate各种主键生成策略与配置详解

hibernate各种主键生成策略与配置详解

ID:20822612

大小:40.00 KB

页数:12页

时间:2018-10-16

hibernate各种主键生成策略与配置详解_第1页
hibernate各种主键生成策略与配置详解_第2页
hibernate各种主键生成策略与配置详解_第3页
hibernate各种主键生成策略与配置详解_第4页
hibernate各种主键生成策略与配置详解_第5页
资源描述:

《hibernate各种主键生成策略与配置详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Hibernate各种主键生成策略与配置详解Hibernate各种主键生成策略与配置详解目录Hibernate各种主键生成策略与配置详解11、assigned22、increment23、hilo24、seqhilo35、sequence36、identity37、native38、uuid39、guid310、foreign311、select312、其他注释方式配置313、小结31、assigned主键由外部程序负责生成,在save()之前必须指定一个。Hibernate不负责维护主键生成。与Hibernate和底层数据库都无关,可以跨数据库。在存储对象前,必须要使用主键的

2、setter方法给主键赋值,至于这个值怎么生成,完全由自己决定,这种方法应该尽量避免。注释方式@Id@GeneratedValue(generator="ud")@GenericGenerator(name="ud",strategy="assigned")“ud”是自定义的策略名,人为起的名字,后面均用“ud”表示。特点:可以跨数据库,人为控制主键生成,应尽量避免。2、increment  由Hibernate从数据库中取出主键的最大值(每个session只取1次

3、),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库。Hibernate调用org.hibernate.id.IncrementGenerator类里面的generate()方法,使用selectmax(idColumnName)fromtableName语句获取主键最大值。该方法被声明成了synchronized,所以在一个独立的Java虚拟机内部是没有问题的,然而,在多个JVM同时并发访问数据库selectmax时就可能取出

4、相同的值,再insert就会发生Dumplicateentry的错误。所以只能有一个Hibernate应用进程访问数据库,否则就可能产生主键冲突,所以不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。官方文档:只有在没有其他进程往同一张表中插入数据时才能使用,在集群下不要使用。注释方式  @Id@GeneratedValue(generator="ud")@GenericGenerator(name="ud",strategy="increment")特点:跨数据库,不适合多进程并发更新数据库,适合单一进程访问数据库,不能用于群集环境。3、hilo  hil

5、o(高低位方式highlow)是hibernate中最常用的一种生成方式,需要一张额外的表保存hi的值。保存hi值的表至少有一条记录(只与第一条记录有关),否则会出现错误。可以跨数据库。hibernate_hilonext_hi100  hiberna

6、te_hilo指定保存hi值的表名  next_hi指定保存hi值的列名  100指定低位的最大值  也可以省略table和column配置,其默认的表为hibernate_unique_key,列为next_hi100  hilo生成器生成主键的过程(以hibernat

7、e_unique_key表,next_hi列为例):  1.获得hi值:读取并记录数据库的hibernate_unique_key表中next_hi字段的值,数据库中此字段值加1保存。  2.获得lo值:从0到max_lo循环取值,差值为1,当值为max_lo值时,重新获取hi值,然后lo值继续从0到max_lo循环。3.根据公式hi*(max_lo+1)+lo计算生成主键值。  注意:当hi值是0的时候,那么第一个值不是0*(max_lo+1)+0=0,而是lo跳过0从1开始,直接是1、2

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。