【问题标题】:Code Generater interprets NUMERIC(20,0) as BIGDECIMAL while it should be interpreted as Long代码生成器将 NUMERIC(20,0) 解释为 BIGDECIMAL,而应将其解释为 Long
【发布时间】:2011-10-07 01:49:17
【问题描述】:

我有一个字段名为“BID”的表,其数据类型设置为 NUMERIC(20,0)。现在我知道它永远不会是十进制/浮点值,而始终是整数/长整数,即自然数。

代码生成器有没有办法让生成的模型类中的变量为 Long,而不是它当前生成的 java.math.BigDecimal。可以在jooq.properties中设置吗??

【问题讨论】:

  • 为什么不在 DBMS 中使用 int 或更长的时间?
  • @gbn: NUMERIC(20,0) 可以容纳比 BIGINT 更大的数字(Java 中的 Long,只有 19 位小数)...
  • @Lukas Eder:NUMERIC(20,0) (+- 9.99 E20) 仅略高于 64 signed int (+- 9.2E18)。更高的数字,是的,但高达 19/20 是 32 位限制的经典解决方法(例如 SQL Server 2000 之前的旧版本)
  • @gbn:我明白了。当我计算一个 long 的十进制数字时,我意识到它实际上是 19。我最初认为它更少......

标签: sql types numeric jooq


【解决方案1】:

此“功能”目前仅适用于 Oracle 数据库,其中 NUMBER 是唯一可用的数字类型。在 jOOQ 中使用 Oracle,NUMBER(20, 0) 将映射到 java.math.BigInteger 而不是 java.math.BigDecimal

在下一个版本 1.6.3 中,此行为也可用于其他 RDBMS。见

https://sourceforge.net/apps/trac/jooq/ticket/639

除此之外,目前无法在代码生成器中覆盖数据类型映射,但如果您并不需要 20 位十进制数字,您可以按照 gbn 的建议使用 BIGINTBIGINT 可以容纳大多数 19 位小数...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 2017-09-03
    • 2015-03-23
    • 2020-09-14
    • 1970-01-01
    • 2012-02-06
    相关资源
    最近更新 更多