hibernate中,定义主键id的 generator的class="uuid" 那么这个Id是不是自动增加

hibernate中,定义主键id的 generator的class="uuid" 那么这个Id是不是自动增加,第1张

首先要知道它的生成原理:

UUID算法使用IP地址、JVM的启动时间、系统时间和一个计数值来产生主键

同时包括两种方式实现:

uuidhex由Hibernate基于128

位唯一值产生算法生成16

进制数值(编码后以长度32

的字符串表示)作为主键。

uuidstring与uuidhex

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

所以呢。。。它每次生成的值不相同的。。。而且生成的结果是字符串形式的。。。故不是自动增长的。。。

自动增长用于数值类型的数据库作为主键的形式。

CREATE FUNCTION [dbo][fun_getUUID32](@newid varchar(36))

RETURNS VARCHAR(32)

AS

BEGIN

DECLARE @id VARCHAR(32);

select @id=SUBSTRING(@newid,1,8)+SUBSTRING(@newid,10,4)+SUBSTRING(@newid,15,4)+ SUBSTRING(@newid,20,4)+SUBSTRING(@newid,25,12)

RETURN @id

END

select dbofun_getUUID32(NEWID());

如果不行的话,难道mysql只能用自动增长列做主键吗,这似乎不太妥当啊。 满意答案偶是队长软件工程师|5730个满意答案2010-07-29MYSQL没有内置的GUID功能,但是MSSQL,oracle,DB2,sybase都提供这样的功能。MYSQL没有这样的功能问题并不大,你可以选择在应用程序层构造GUID插入数据库。 不过就算MYSQL内置GUID也没有什么意义,并不是MYSQL技术不行,而是MYSQL追求更好的性能。因为使用了GUID后,性能会降低大概6-10倍左右。 当然,选择哪种解决方案,都各有利弊,没有银d。不过如果就MYSQL平台来说,官方的选择是放弃GUID。 追问: 哦 原来这样啊 性能降低6-10倍 好厉害啊 小L、 的感言: 谢谢2010-07-30

那么我们先看看什么是UUID?简单的说,UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。在UUID的算法中,可能会用到诸如网卡MAC地址,IP,主机名,进程ID等信息以保证其独立性

优点:

能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。

保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:

比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。

使用UUID后,URL显得冗长,不够友好

那么如何生成UUID,一个自动生成不重复文本的函数,Hibernate提供的uuid

hibernate中的uuid是自动生成主键的一种机制,但是它依赖于hiberbate包,刚刚将它从Hibernate中提取出来,(从其他博客和公司的组件代码中发现了UUID的生成类)供各位使用

下面针对上述UUID的缺点说说我的看法,比较占地方这个缺点我不是很在乎,现在最不值钱的就是硬盘了,略过此条缺点无妨。至于说使用UUID后,URL显得不友好,我觉得这多少是你的INT情结造成的惯性思维,其实,和INT类型相比,UUID才是最自然的主键选择,注意,我这里用的是自然这个形容词,仔细体会一下你能理解我的意思。另外,很多时候,URL本身就不需要友好,比如,一个电子商务网站,按照INT友好的URL说法,她的订单URL大概是下面这个形式的:/orderphp/id/123,我要说明的是,这样是很友好,但是有些太友好了,友好的甚至不安全,比如说,我早晨下一个订单,发现URL是/orderphp/id/1000,晚上再下一个订单发现URL是/orderphp/id/2000,那么我就可以估计出此网站一天的订单数大致是1000左右,甚至能大体估计出它的销售额,而这些数据往往都是重要的商业秘密。使用UUID就没有这个顾虑。

可能GUID编码,你看看表设计中,这个字段是否有默认值newid()函数,

这个是32位的唯一标示符(不算“-”字符的话),或者你看看是否是程序中有这个类似的方法

作用就是标识唯一,没有其他意思

以上就是关于hibernate中,定义主键id的 generator的class="uuid" 那么这个Id是不是自动增加全部的内容,包括:hibernate中,定义主键id的 generator的class="uuid" 那么这个Id是不是自动增加、sql server2000 怎么生成UUID的方法、mysql支持自动生成guid吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9595213.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存