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

时间:2010-10-25 23:15:25

标签: java mysql hibernate jpa

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

感谢

1 个答案:

答案 0 :(得分:12)

  

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

是的,这会奏效。

  

当我的表达到我期望的行数时?

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

  

Running Out of Numbers

     

一种偏执的妄想恐惧   程序员经常运行   没有序列号。最多的   顺序策略只是保持   递增一个数字   不可避免的,你最终会   用完。然而,只要一个大   足够的数字精度用于   存储序列id这不是   问题。例如,如果你存储了你的   在NUMBER(5)列中的ID,这样就可以了   允许99,999个不同的ID,其中   大多数系统最终会耗尽。   但是,如果您将您的ID存储在   NUMBER(10)列,更多   典型的,这将存储   9,999,999,999个ID,或每个id   第二次约300年(更长   比大多数数据库存在)。但   也许你的系统会处理很多   数据,(希望)围绕着   很长时间。如果你存储你的身份证   在NUMBER(20)这将是   99,999,999,999,999,999,999 ids,或一个   id约为每毫秒   300亿年,这很漂亮   安全

     

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

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