问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernate为什么要定义主键的生成方式?

发布网友 发布时间:2022-04-13 20:57

我来回答

2个回答

懂视网 时间:2022-04-14 01:18

Key Generator主键产生器 lt;generatorgt;元素用来设定标识生成器。Hibernate提供了标识符生成器接口: org.hibernate.id.Ident

Key Generator主键产生器

元素用来设定标识生成器。Hibernate提供了标识符生成器接口: org.hibernate.id.IdentifierGenerator接口;并且提供了多种内置的实现。例如: org.hibernate.id.IdentityGenerator; org.hibernate.id.IncrementGenerator;它们的缩写名分别为:identity和increment。在设置子元素的class属性时,既可以提供完整的标识符生成器的类名,也可以给定缩写名

标识符生成器

说 明

increment

identity

)

sequence

hilo

native

uuid.hex

assigned


  主键由外部程序负责生成,无需Hibernate参与。

算法实现的主键生成机制,需要额外的数据库表保存主键生成历史状态。

类似,通过hi/lo 算法实现的主键生成机制,只是主键历史状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。


作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问,此方式必须避免使用。

、SQL Server、MySQL中的主键生成机制。

机制生成主键。如Oralce 中的Sequence。

根据底层数据库自行判断采用identity、hilo、sequence其中一种作为主键生成方式。



8)

基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

类似,,只是生成的主键未进行编码(长度16)。在某些数据库中可能出现问题(如PostgreSQL)。

方式生成主键将提供最好的性能和数据库平台适应性。
  另外由于常用的数据库,如Oracle、DB2、SQLServer、MySql 等,都提供了易用的主键生成机制(Auto-Increase 字段或者Sequence)。我们可以在数据库提供的主键生成机制上,采用generator-class=native的主键生成方式。

  不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的还有数据的加锁解锁操作,这对性能产生了较大影响。因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。

increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库
  identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL
  sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
  hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库
  seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.
  uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库
  uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库
  native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。
  assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。

linux

热心网友 时间:2022-04-13 22:26

首先得知道,这个主键有代理主键和业务主键之分,例如有一个对象student,属性name,age,如果把name当做主键,那么就是业务主键,如果再加一个id属性,没有任何意义,就是代理主键,而设置主键(代理主键)的生成方式,是因为,不同的生成方式,有不同的使用范围,同时还和底层数据库支持有关!追问在使用常规方法连接数据库的时候,没有设置主键的策略。是不是因为hibernate是可以跨越数据库的,而且它可以自动生成表,所以要设置这个主键的生成策略?以供不同的数据库建立主键?而常规方法,我用的Oracle会先建立表,并且设置了主键而不同?

追答你说的有一定道理!但是hibernate对多数据库的兼容性应该不是设置主键的主要原因!主键应该是插入数据是,给代理主键赋值吧!这根生成表没有关系吧!对于hibernate的研究不是很深,希望有大牛能够解答吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
13岁一直到18岁晚上经常熬夜会有什么影响 具象表现素描内容简介 ...| 从14世纪文艺复兴到20世纪具象表现绘画 · 168幅画 · 图解西方... 【漫画赏析】比喻具象化——《孤高之人》手法分析 具象美术作品有哪些 具象艺术艺术家介绍 话说 曾经有个演唱会 是初音未来演唱会 39祭 谁知道微信聊天记录删掉了,还能恢复过来吗?有什么软件可以恢复吗?不... 六爻。测缘分。测婚姻 礼仪起源于祭祀的证据是什么? 婚假扣了奖金 要如何与单位交涉 wopti流氓软件清除大师PKwindows清理助手(支持哪一个?来顶帖了) 爸爸姓雷妈妈姓雷,需要取一个四个字的并且37画的名字,是女孩,梦幻一点... 江苏南京市婚假是否为15天?公司不给批15天怎么办? 请问南京有晚婚假的规定吗?是多少天? 南京婚假多少天2022 湖南省高等学校英语应用能力考试A级 女儿红能存放多少年 言情小说里都有哪些现在也能喝到的美酒? 如何鉴别陈年女儿红 梦见我舅的车把我家的黑猪头快要扔掉了 请问湖南高等学校英语应用能力考试(PRETCO)*证书者可免考自考短线英语(一)的吗? 湖南高等教育英语应用能力考试联系电话 二十年左右的女儿红还能喝吗值多少钱 公司制个人独资投资人在公司任职工资怎么发? 女孩子18年的女儿红是什么 湖南英语应用能力考试A级分数查询 十八年的女儿红 酒 的价格是多少 合伙企业的投资者,工资能否一样拿 证券投资顾问工资是多少? 南京市产假期间工资怎么算 请问婚假期间奖金问题? 用windows优化大师可以清理哪些东西,什么是应该经常清理的 windows优化大师标准版、专业版区别? 江苏南京上班婚假有几天,包含周六日吗? 谁能告诉 现在江苏南京婚假到底多少天啊? 哪有手机单机养成游戏《猫恋物语-约定的彼方》破解版JAR下载 猫咪大战争第三章boss怎么打啊,本人打了7次都没过,阵容换了3次都是20级,求大神带我 猫和汤的功能设施在哪里 小鸟的寿命有多长?? 我用自发粉搓揉的做馒头粉,做好后需要发酵多久 怎么修改支付宝实名认证? 毛巾泡多久才合适? 在青岛世界五百强企业名单? 青岛钢铁五百强的企业有哪些 中国企业五百强榜单发布,哪些曾经在榜单的企业跌出了榜单? 大师擂台靠挥毛笔放倒四名壮汉,该大师为何一直能得到广泛支持? 历史上除了关羽还有谁千里走单骑成功过? 《三国》千里走单骑有关哪个人物? 关羽历史上其实没有千里走单骑,然而谁却做到了?