Java(和Hibernate)中Long数据类型的主键长度?

gav*_*koa 5 java oracle hibernate hibernate-mapping

log(2^32) / log(10) =~ 9.63295986126
log(10^0.63295986126) / log(2) =~ 2.10264714605 > 2 bit

log(2^64) / log(10) =~  19.2659197225
log(10^0.2659197225) / log(2) =~ 0.883366197155 < 2 bit

如您所见,9位数Integer不会导致Integer类型中的负值.

但是19位数Long会导致符号溢出...我通常会看到NUMBER(18)ID列的类型......

是否有可能在Hibernate中映射NUMBER(19)到问题Long

ibr*_*041 2

不要使用 Long - 它用于数字。你永远不会乘、加、减 PK。(你甚至可能从来没有对它们进行排序)。对于 Oracle 数据类型 NUMBER,请使用 oracle.sql.NUMBER 或 java.math.BigDecimal。