【发布时间】:2020-02-19 11:08:12
【问题描述】:
我遇到了关于使用 Hibernate 检索 10^18 位数字的问题。虽然我不完全确定这完全是 Oracle 数据库、Grails、Hibernate 还是 Java 问题。考虑到这个 Grails 域类:
class Payment {
BigInteger id
BigDecimal amount
static mapping = {
id generator: "assigned"
version false
}
}
我通过检索遇到问题:
Payment savePayment() {
BigInteger id = 201910151421550246D
BigDecimal amount = 100.00G
Payment payment = new Payment()
payment.id = id
payment.amount amount
payment.save(flush: true)
Payment retrievedPayment = Payment.findById(id)
println "payment.id: " + payment.id
println "payment.amount: " + payment.amount
println "retrievedPayment.id: " + retrievedPayment.id
println "retrievedPayment.amount: " + retrievedPayment.amount
// payment.id: 201910151421550246
// payment.amount: 100.00
// retrievedPayment.id: 201910151421550240
// retrievedPayment.amount: 100.00
return retrievedPayment
}
我在保存之前将201910151421550246 分配为 id,并且如果它在数据库中相同,我还确认了它的值。它是。此外,当我尝试使用该id 检索所述记录时,我仍然可以检索相同的Payment 记录。问题是为什么值偏离了 6 个点?我目前正在将其映射到String 数据类型,并在我需要执行数字运算时将其转换为 BigInteger 作为临时解决方案。
【问题讨论】: