【问题标题】:Length of primary key for Long data type in Java (and Hibernate)?Java(和Hibernate)中Long数据类型的主键长度?
【发布时间】:2013-02-19 21:16:48
【问题描述】:
日志(2 ^ 32)/日志(10)=〜9.63295986126 log(10^0.63295986126) / log(2) =~ 2.10264714​​605 > 2 位 日志(2 ^ 64)/日志(10)=〜19.2659197225 log(10^0.2659197225) / log(2) =~ 0.883366197155

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

但是Long 中的 19 位数字会导致符号溢出...我通常将NUMBER(18) 视为 ID 列的类型...

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

【问题讨论】:

  • 无法理解:oracle 中表中的列长度如何影响从 Hibernate 获取 ID 中的负数的可能性?
  • log(9'999'999'999'999'999'999) / log(2) =~ 63.1166338029 所以你不能把这个值保存在 63 位中(注意有 19 个 9)。所以将使用符号位......并且可能会出现 Hibernate 抛出错误。这是一个问题......
  • 好的,答案是:可以使用符号位。那么问题是什么?
  • 我的母语不是英语:在 Hibernate 中将 NUMBER(19) 映射到 Long 是否有问题?

标签: java oracle hibernate hibernate-mapping


【解决方案1】:

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

【讨论】:

  • 嗯...永远不要使用String,因为我从不连接/搜索它们。但是你是对的,对于 big NUMBER 我必须使用 java.math.BigDecimal 作为 id 字段! +1
猜你喜欢
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
相关资源
最近更新 更多