Java 特定于应用程序的种子数据总体
Env:JBoss(h2、MySQl、postgres)、JPA、hibernate3.3.xJava 特定于应用程序的种子数据总体,java,hibernate,database-design,jpa,jakarta-ee,Java,Hibernate,Database Design,Jpa,Jakarta Ee,Env:JBoss(h2、MySQl、postgres)、JPA、hibernate3.3.x @Id @GeneratedValue(strategy = IDENTITY) private Integer key; 目前,我们的主键是使用上述注释创建的。我们希望支持大量用户(约百万用户),应该使用什么密钥。它应该是整数还是长的,或者我应该使用上面声明的无符号版本 我们有一个j2ee应用程序,需要在安装时填充一些种子数据。购买时,客户在应用程序顶部创建自己的数据。我们只是想确保有足够的空间为
@Id
@GeneratedValue(strategy = IDENTITY)
private Integer key;
int:
数据类型是一个32位有符号2的补码整数。它的最小值为-2147483648,最大值为2147483647(含)。对于整数值,此数据类型通常是默认选择,除非有理由(如上所述)选择其他数据类型。此数据类型很可能足够大,足以容纳程序将使用的数字,但如果需要更大范围的值,请改用long
由您决定是否安全:)
(…)我们只是想确保有足够的空间为将来的版本发布、修改或添加数据。支持这一点的最佳机制是什么
我将使用上述数据库对此进行测试,但对种子数据使用负ID似乎是更安全的解决方案(没有可能的冲突)。如果它不起作用(我认为应该),那么我相信表策略将是最可移植的解决方案。它似乎确实适用于-ve数字。可能发生冲突的情况是什么?生成的id到达2147483647后如何溢出?它是否移动到-2147483648并开始向零计数。只是想确保不会有issues@user339108:如果使用负ID,则不可能发生冲突,这就是为什么此解决方案很好的原因。关于另一个问题,我认为生成器不会移动到-2147483648(但我需要检查)。如果你想安全,可以使用长的。我不确定尺寸要求,如果可能的话,我宁愿避免使用长的