繁体   English   中英

使用@GeneratedValue(strategy = GenerationType.TABLE),sequence_next_hi_value是一个int(11),但我的表有一个id列bigint(20)

[英]Using @GeneratedValue(strategy=GenerationType.TABLE), the sequence_next_hi_value is an int(11) but my table have a id column bigint(20)

我正在使用@Id与@GeneratedValue(strategy = GenerationType.TABLE),只是检查了hibernate已经创建了一个表hibernate_sequences,但是sequence_next_hi_value的列类型是一个int(11)。 我有一些实体(我的意思是表)有一个类型为bigint(20)的id字段,这会有效吗? 当我的桌子达到我期待的行数时?

谢谢

(...)hibernate创建了一个表hibernate_sequences,但sequence_next_hi_value的列类型是int(11)。 我有一些实体(我的意思是表)有一个类型为bigint(20)的id字段,这会有效吗?

是的,这会奏效。

当我的桌子达到我期待的行数时?

我不确定我理解那部分。 但如果问题是关于数字用完了,这里有一些来自JPA维基书的数字:

耗尽数字

程序员经常遇到的一种偏执的妄想恐惧已经没有了序列号。 由于大多数序列策略只是递增一个数字,所以最终会用完它是不可避免的。 但是,只要使用足够大的数值精度来存储序列id,这就不是问题。 例如,如果您将id存储在NUMBER(5)列中,这将允许99,999个不同的ID,这些ID在大多数系统上最终会耗尽。 但是,如果您将ID存储在NUMBER(10)列中(更典型的话),这将存储9,999,999,999个ID,或者每秒存储一个ID大约300年 (比大多数数据库存在的时间长)。 但也许你的系统会处理大量数据,并且(希望)会在很长一段时间内完成。 如果你将你的id存储在NUMBER(20)中,这将是99,999,999,999,999,999,999 id,或者每毫秒一个id,大约3,000,000,000年,这是非常安全的。

但是你还需要在Java中存储这个id。 如果将id存储在Java int中,这将是一个32位数,即4,294,967,296个不同的id,或者每秒一个id,大约200年。 如果你改为使用long,这将是一个64位数,即18,446,744,073,709,551,616个不同的id,或者每毫秒一个id大约600,000,000年,这是非常安全的。

IMO,一个默认分配大小为50的int(11)给你一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM