是否有理由不将所有整数类型映射到 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 时,这显然不是问题。
所有数据库似乎都对 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 时,这显然不是问题。