是否有理由不将所有整数类型映射到 Grails 域 类 中的 BigInteger?

Is there a reason not to map all integer types to a BigInteger in Grails Domain Classes?

所有数据库似乎都对 Java 将各种整数数据类型映射到的对象提出了建议。例如在 DB2 中它是 [SMALLINT: java.lang.Short, INTEGER: java.lang.Integer, BIGINT: java.lang.Long].

在 Grails Domain classes 中对所有这些使用 java.math.BigInteger 是否有问题?这将使它们的输入更简单,并且类似于十进制方法,其中所有内容都是 java.math.BigDecimal.

澄清一下,我无法控制数据库中的数据类型,如果我这样做的话,也不会提倡仅使用一种整数类型来破坏数据模型。我只是提议将所有整数数据类型映射到 Grails 域 class 中的 java.math.BigInteger,例如:

class NdIntegerTest {
    BigInteger id
    BigInteger ndSmallint
    BigInteger ndInteger
    BigInteger ndBigint
    ...
}

这是有原因的,那就是将数据存储在您的数据库中。例如,如果您有一个要存储一个人的年龄的用例,那么使用 BIGINT 是没有意义的。在某些数据库引擎中,存储 BIGINT 比存储 SMALLINT 占用更多 space。显然,当你有数十亿条记录时,这会产生影响,但当你有几千条记录时,这就无关紧要了。

就是这个原因。

忠告,不要 使用对于您希望存储的数据类型而言不切实际的数据类型。从长远来看,运行 你会发现你为使事物同质化所做的努力从长远来看只会产生问题。为正确的工作使用正确的工具,为正确的数据位使用正确的数据类型。

基于总输入(感谢 Joshua),我得出结论,java.math.BigInteger 标准化是对 Grails 域 class.

中整数数据类型的合理处理

我的测试基于 class,类似于 post,涉及使用 DB2 的 SMALLINT、INTEGER 和 BIGINT 数据类型。我尝试插入和更新行,一切似乎都很顺利。我在元素中放置的数据多于数据库可以接受的地方,我得到了以下异常(有点)。

    org.springframework.dao.InvalidDataAccessResourceUsageException: could not...
    at ...
Caused by: org.hibernate.exception.SQLGrammarException: could not...
    at ...
Caused by: com.ibm.db2.jcc.a.bn: [jcc][10177][11599][3.51.90] Invalid data conversion: Requested conversion would result in a loss of precision of [value]. ERRORCODE=-4461, SQLSTATE=42815
    at ...

将过大的值读入过小的域 Class 变量 FWIW 时会发生同样的错误,当变量是 BigInteger 时,这显然不是问题。